Viết chuỗi vào một tệp trên một dòng mới mỗi lần


259

Tôi muốn nối một dòng mới vào chuỗi của tôi mỗi khi tôi gọi file.write(). Cách dễ nhất để làm điều này trong Python là gì?

Câu trả lời:


294

Sử dụng "\ n":

file.write("My String\n")

Xem hướng dẫn sử dụng Python để tham khảo.


3
Nếu bạn đang sử dụng các biến để soạn bản ghi, bạn có thể thêm + "\ n" vào cuối, như fileLog.write (var1 + var2 + "\ n").
Filipe

4
Trong các phiên bản mới hơn của Python (3.6+), bạn cũng có thể chỉ cần sử dụng chuỗi f:file.write(f"{var1}\n")
Halfdan

109

Bạn có thể làm điều này theo hai cách:

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

hoặc, tùy thuộc vào phiên bản Python của bạn (2 hoặc 3):

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

tôi đang sử dụng f.writelines (str (x)) để ghi vào một tệp trong đó x là danh sách bây giờ cho biết cách viết danh sách x vào một tệp đối phó với mỗi danh sách bắt đầu từ dòng mới
kaushik

2
@kaushik: f.write ('\ n'.join (x)) hoặc f.writelines (i +' \ n 'cho i trong x)
Steven

Tôi nghĩ rằng phương pháp f.write tốt hơn vì nó có thể được sử dụng trong cả Python 2 và 3.
Đặng Mạnh Trường

78

Bạn có thể dùng:

file.write(your_string + '\n')

3
bạn có thể sử dụng cách sử dụng, ví dụ: khi bạn viết int vào một tệp, bạn có thể sử dụng file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 投资

@xikhari Tại sao? file.write(f"my number is: {number}\n")là tốt và có thể đọc được.
Hướng dẫn

25

Nếu bạn sử dụng nó rộng rãi (rất nhiều dòng viết), bạn có thể phân lớp 'tập tin':

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

Bây giờ nó cung cấp một chức năng bổ sung wl thực hiện những gì bạn muốn:

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

Có thể tôi đang thiếu một cái gì đó như các ký tự dòng mới khác nhau (\ n, \ r, ...) hoặc dòng cuối cùng cũng bị chấm dứt với một dòng mới, nhưng nó hoạt động với tôi.


1
Bạn không cần return Nonetrong trường hợp này bởi vì trước tiên, bạn không cần nó và thứ hai, mọi hàm Python đều trả về Nonetheo mặc định khi không có returncâu lệnh nào .
Anna

10

bạn có thể làm:

file.write(your_string + '\n')

như được đề xuất bởi một câu trả lời khác, nhưng tại sao lại sử dụng nối chuỗi (chậm, dễ bị lỗi) khi bạn có thể gọi file.writehai lần:

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

lưu ý rằng ghi được đệm để nó tương tự như vậy.


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

hoặc là

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

4
Mở tệp có "a" làm tham số thay vì "w" không thay đổi ghi thành chức năng để hoạt động theo cách bạn mô tả. Ảnh hưởng duy nhất của nó là tập tin sẽ không bị ghi đè và văn bản sẽ được thêm vào dòng dưới cùng thay vì bắt đầu ở phía trên bên trái của một tập tin trống.
dân chủ

2

Chỉ là một ghi chú, filekhông được hỗ trợ Python 3và đã bị xóa. Bạn có thể làm tương tự với openchức năng tích hợp.

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

2

Trừ khi ghi vào tệp nhị phân, sử dụng in. Dưới đây ví dụ tốt để định dạng các tệp csv:

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

Sử dụng:

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

Ghi chú:


2

Một giải pháp khác ghi từ danh sách bằng cách sử dụng chuỗi

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

1

Đây là giải pháp mà tôi đã nghĩ ra khi cố gắng tự giải quyết vấn đề này để sản xuất một cách có hệ thống như là các dải phân cách. Nó viết bằng cách sử dụng một danh sách các chuỗi trong đó mỗi chuỗi là một dòng của tệp, tuy nhiên có vẻ như nó cũng có thể phù hợp với bạn. (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 ""

Tại sao không đơn giản with open(path, "w") as file: for line in strList: file.write(line + "\n")? Bằng cách này, bạn có thể loại bỏ tất cả các công việc danh sách, kiểm tra và chỉ có 3 dòng.
Hướng dẫn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.