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?

Jawaban:


294

Gunakan "\ n":

file.write("My String\n")

Lihat manual Python untuk referensi.


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

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

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.


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.


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

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

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:


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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.