हर बार एक नई लाइन पर एक फ़ाइल में स्ट्रिंग लिखना


259

मैं हर बार जब भी कॉल करता हूं, मैं अपने स्ट्रिंग को एक नई लाइन अप करना चाहता हूं file.write()। पायथन में ऐसा करने का सबसे आसान तरीका क्या है?

जवाबों:


294

"\ N" का प्रयोग करें:

file.write("My String\n")

संदर्भ के लिए पायथन मैनुअल देखें ।


3
यदि आप रिकॉर्ड बनाने के लिए वेरिएबल्स का उपयोग कर रहे हैं, तो आप fileLog.write (var1 + var2 + "\ n") की तरह, अंत में + "\ n" जोड़ सकते हैं।
फिलिपे

4
पायथन के नए संस्करणों में (3.6+) आप केवल एफ-स्ट्रिंग्स का उपयोग कर सकते हैं:file.write(f"{var1}\n")
आधा

109

आप इसे दो तरीकों से कर सकते हैं:

f.write("text to write\n")

या, आपके पायथन संस्करण (2 या 3) पर निर्भर करता है:

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x

मैं एक फाइल में लिखने के लिए f.writelines (str (x)) का उपयोग कर रहा हूं जहां x अब सूची है कि कैसे बताएं कि कैसे एक फाइल में एक सूची x लिखना है जो प्रत्येक पंक्ति को नई लाइन पर शुरू कर रहा है
कौशिक

2
@kaushik: f.write ('\ n'.join (x)) या f.writelines (i +' \ n 'i for x)
स्टीवन

मुझे लगता है कि f.write विधि बेहतर है क्योंकि इसका उपयोग पायथन 2 और 3 में किया जा सकता है।
डांग मान

78

आप उपयोग कर सकते हैं:

file.write(your_string + '\n')

3
आप उपयोग कर सकते हैं, उदाहरण के लिए, जब आप फ़ाइल में इंट लिखते हैं, तो आप फ़ाइल का उपयोग कर सकते हैं। राइट (str (a) + '\ n')
未来 陆家嘴 顶尖 的

@xikhari क्यों? file.write(f"my number is: {number}\n")बस ठीक है और पठनीय है।
15

24

यदि आप इसका बड़े पैमाने पर उपयोग करते हैं (बहुत सी लिखित पंक्तियाँ), तो आप 'फ़ाइल' को उपवर्गित कर सकते हैं:

class cfile(file):
    #subclass file to have a more convienient use of writeline
    def __init__(self, name, mode = 'r'):
        self = file.__init__(self, name, mode)

    def wl(self, string):
        self.writelines(string + '\n')

अब यह एक अतिरिक्त फ़ंक्शन wl प्रदान करता है जो आपको चाहिए:

fid = cfile('filename.txt', 'w')
fid.wl('appends newline charachter')
fid.wl('is written on a new line')
fid.close()

हो सकता है कि मुझे अलग-अलग न्यूलाइन अक्षरों (\ n, \ r, ...) की तरह कुछ याद आ रहा हो या यह कि आखिरी लाइन भी एक नई लाइन के साथ समाप्त हो गई हो, लेकिन यह मेरे लिए काम करती है।


1
आपको return Noneइस मामले में आवश्यकता नहीं है क्योंकि पहले, आपको इसकी आवश्यकता नहीं है और दूसरा, Noneजब कोई returnबयान नहीं है , तो प्रत्येक पायथन फ़ंक्शन डिफ़ॉल्ट रूप से लौटता है ।
अन्ना

10

तुम यह कर सकते थे:

file.write(your_string + '\n')

जैसा कि एक अन्य उत्तर द्वारा सुझाया गया है, लेकिन जब आप file.writeदो बार कॉल कर सकते हैं, तो स्ट्रिंग समवर्ती (धीमा, त्रुटि-प्रवण) का उपयोग क्यों कर रहे हैं :

file.write(your_string)
file.write("\n")

ध्यान दें कि लिखता है बफ़र तो यह एक ही बात के लिए राशि है।


6
file_path = "/path/to/yourfile.txt"
with open(file_path, 'a') as file:
    file.write("This will be added to the next line\n")

या

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")

4
"डब्ल्यू" के बजाय एक पैरामीटर के रूप में "ए" के साथ एक फ़ाइल खोलना आपके द्वारा वर्णित तरीके से काम करने के लिए फ़ंक्शन को नहीं बदलता है। इसका एकमात्र प्रभाव यह है कि फ़ाइल अधिलेखित नहीं होगी और पाठ को रिक्त फ़ाइल के शीर्ष बाईं ओर से शुरू करने के बजाय नीचे-सबसे पंक्ति में जोड़ा जाएगा।
लोकतंत्रवादी

2

बस एक नोट, fileमें समर्थित नहीं है Python 3और हटा दिया गया था। आप openबिल्ट-इन फ़ंक्शन के साथ भी ऐसा कर सकते हैं ।

f = open('test.txt', 'w')
f.write('test\n')

2

जब तक बाइनरी फ़ाइलों को न लिखें, प्रिंट का उपयोग करें। सीएसवी फ़ाइलों को प्रारूपित करने के लिए अच्छा उदाहरण नीचे दिया गया है:

def write_row(file_, *columns):
    print(*columns, sep='\t', end='\n', file=file_)

उपयोग:

PHI = 45
with open('file.csv', 'a+') as f:
    write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
    write_row(f)  # newline
    write_row(f, data[0], data[1])

टिप्पणियाँ:


2

एक और समाधान जो एक सूची से fstring का उपयोग करके लिखता है

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')

1

यह वह समाधान है जो मैं स्वयं के लिए इस समस्या को हल करने की कोशिश कर रहा हूं ताकि व्यवस्थित रूप से विभाजक के रूप में \ n का उत्पादन किया जा सके। यह स्ट्रिंग की एक सूची का उपयोग करते हुए लिखता है, जहां प्रत्येक स्ट्रिंग फ़ाइल की एक पंक्ति है, हालांकि ऐसा लगता है कि यह आपके लिए भी काम कर सकती है। (अजगर 3. +)

#Takes a list of strings and prints it to a file.
def writeFile(file, strList):
    line = 0
    lines = []
    while line < len(strList):
        lines.append(cheekyNew(line) + strList[line])
        line += 1
    file = open(file, "w")
    file.writelines(lines)
    file.close()

#Returns "\n" if the int entered isn't zero, otherwise "".
def cheekyNew(line):
    if line != 0:
        return "\n"
    return ""

बस क्यों नहीं with open(path, "w") as file: for line in strList: file.write(line + "\n")? इस तरह आप सभी सूची कार्य, चेक निकाल सकते हैं, और सिर्फ 3 लाइनें हैं।
गिउमूटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.