Her seferinde bir dosyaya yeni bir satırda dize yazma


259

Her aradığımda dizgime bir satırsonu eklemek istiyorum file.write(). Python'da bunu yapmanın en kolay yolu nedir?

Yanıtlar:


294

"\ N" kullanın:

file.write("My String\n")

Referans için Python kılavuzuna bakın .


3
Kaydı oluşturmak için değişkenler kullanıyorsanız, sonuna fileLog.write (var1 + var2 + "\ n") gibi + "\ n" ekleyebilirsiniz.
Filipe

4
Python'un yeni sürümlerinde (3.6+) sadece f-stringleri de kullanabilirsiniz:file.write(f"{var1}\n")
halfdan

109

Bunu iki şekilde yapabilirsiniz:

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

veya Python sürümünüze bağlı olarak (2 veya 3):

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

Ben yeni bir satırdan başlayarak her liste başa bir dosyaya bir liste x nasıl bir liste yazmak için anlatmak için x listedir bir dosyaya yazmak için f.writelines (str (x)) kullanıyorum
kaushik 27:10

2
@kaushik: f.write ('\ n'.join (x)) veya f.writelines (x in i için i +' \ n ')
Steven

F.write yönteminin hem Python 2 hem de 3'te kullanılabileceğinden daha iyi olduğunu düşünüyorum
Dang Manh Truong


25

Yaygın olarak kullanırsanız (çok sayıda yazılı satır), 'file' alt sınıfını kullanabilirsiniz:

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')

Şimdi istediğini yapan ek bir fonksiyon wl sunuyor:

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

Belki farklı yeni satır karakterleri (\ n, \ r, ...) gibi bir şey eksik veya son satır da yeni satırla sonlandırılıyor, ama benim için çalışıyor.


1
Sen gerekmez return Noneilk olarak, ikinci her Python fonksiyonu döner ihtiyaç ve yok çünkü bu durumda Nonehiçbir olduğunda varsayılan olarak returnifadesi.
Anna

10

şunları yapabilirsiniz:

file.write(your_string + '\n')

başka bir cevap tarafından önerildiği gibi, ancak file.writeiki kez arayabildiğinizde neden dize birleştirme (yavaş, hataya eğilimli) kullanıyorsunuz :

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

notların aynı şekilde yazıldığından, arabelleklendiğine dikkat edin.


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")

veya

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

4
"A" yerine "w" yerine bir dosyayı açmak, yazma işlevini tanımladığınız şekilde çalışacak şekilde değiştirmez. Sahip olduğu tek etki, dosyanın üzerine yazılmayacağı ve boş bir dosyanın sol üst köşesinden başlamak yerine metnin en alt satırına eklenmesidir.
democidist

2

Yalnızca bir not, filedesteklenmiyor Python 3ve kaldırıldı. openDahili işlev için de aynısını yapabilirsiniz .

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

2

İkili dosyalara yazmadığınız sürece print kullanın. Aşağıdaki örnek csv dosyalarını biçimlendirmek için iyi:

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

Kullanımı:

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])

Notlar:


2

Fstring kullanarak bir listeden yazan başka bir çözüm

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

1

Bu sorunu sistematik olarak ayırıcılar olarak üretmek için bu sorunu kendim çözmeye çalıştığım çözüm. Her dizenin dosyanın bir satırı olduğu bir dizeler listesi kullanarak yazar, ancak sizin için de işe yarayabilir gibi görünüyor. (Python 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 ""

Neden basit değil with open(path, "w") as file: for line in strList: file.write(line + "\n")? Bu şekilde tüm liste çalışmasını, kontrolü ve sadece 3 satır kaldırabilirsiniz.
Guimoute
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.