Menulis string ke file di baris baru setiap kali

259

Saya ingin menambahkan baris baru ke string saya setiap kali saya menelepon file.write(). Apa cara termudah untuk melakukan ini dengan Python?

kaushik
sumber

Jawaban:

294

Gunakan "\ n":

file.write("My String\n")

Lihat manual Python untuk referensi.

halfdan
sumber
3
Jika Anda menggunakan variabel untuk menyusun catatan, Anda dapat menambahkan + "\ n" di bagian akhir, seperti fileLog.write (var1 + var2 + "\ n").
Filipe
4
Dalam versi Python (3.6+) yang lebih baru Anda juga bisa menggunakan f-string:file.write(f"{var1}\n")
halfdan
109

Anda dapat melakukan ini dengan dua cara:

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

atau, tergantung pada versi Python Anda (2 atau 3):

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x
Greg Hewgill
sumber
saya menggunakan f.writelines (str (x)) untuk menulis ke dalam file di mana x adalah daftar untuk sekarang memberitahu cara menulis daftar x ke dalam file mengatasi setiap daftar mulai dari baris baru
kaushik
2
@kaushik: f.write ('\ n'.join (x)) atau f.writelines (i +' \ n 'for i in x)
Steven
Saya pikir metode f.write lebih baik karena dapat digunakan dalam Python 2 dan 3.
Dang Manh Truong
78

Kamu bisa memakai:

file.write(your_string + '\n')
Krishna K
sumber
3
Anda dapat menggunakan penggunaannya, misalnya, ketika Anda menulis int ke file, Anda dapat menggunakan file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 的 投资
@xikhari Kenapa? file.write(f"my number is: {number}\n")baik dan enak dibaca.
Guimoute
25

Jika Anda menggunakannya secara luas (banyak baris tertulis), Anda dapat mensubklasifikasikan 'file':

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

Sekarang ia menawarkan fungsi tambahan wl yang melakukan apa yang Anda inginkan:

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

Mungkin saya kehilangan sesuatu seperti karakter baris baru yang berbeda (\ n, \ r, ...) atau bahwa baris terakhir juga diakhiri dengan baris baru, tetapi itu berfungsi untuk saya.

matematika
sumber
1
Anda tidak perlu return Nonedalam hal ini karena pertama, Anda tidak memerlukannya dan kedua, setiap fungsi Python kembali Nonesecara default ketika tidak ada returnpernyataan.
Anna
10

Anda bisa melakukan:

file.write(your_string + '\n')

seperti yang disarankan oleh jawaban lain, tetapi mengapa menggunakan penggabungan string (lambat, rawan kesalahan) saat Anda dapat menelepon file.writedua kali:

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

perhatikan bahwa menulis buffered sehingga jumlah yang sama.

Jean-François Fabre
sumber
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")

atau

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")
Panos Kal.
sumber
4
Membuka file dengan "a" sebagai parameter alih-alih "w" tidak mengubah fungsi tulis agar berfungsi seperti yang Anda gambarkan. Satu-satunya efek yang dimilikinya adalah bahwa file tidak akan ditimpa dan teks akan ditambahkan ke baris paling bawah alih-alih dimulai dari kiri atas file kosong.
demokrat
2

Hanya sebuah catatan, filetidak didukung Python 3dan dihapus. Anda dapat melakukan hal yang sama dengan openfungsi bawaan.

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

Kecuali menulis ke file biner, gunakan cetak. Contoh di bawah ini bagus untuk memformat file csv:

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

Pemakaian:

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

Catatan:

Mesco
sumber
2

Solusi lain yang menulis dari daftar menggunakan fstring

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

Ini adalah solusi yang saya buat untuk mencoba memecahkan masalah ini sendiri untuk menghasilkan secara sistematis sebagai pemisah. Itu menulis menggunakan daftar string di mana setiap string adalah satu baris file, namun tampaknya itu dapat bekerja untuk Anda juga. (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 ""
demokrat
sumber
Kenapa tidak sederhana saja with open(path, "w") as file: for line in strList: file.write(line + "\n")? Dengan cara ini Anda dapat menghapus semua pekerjaan daftar, cek, dan hanya memiliki 3 baris.
Guimoute