การเขียนสตริงลงในไฟล์บนบรรทัดใหม่ทุกครั้ง


259

file.write()ฉันต้องการที่จะผนวกการขึ้นบรรทัดใหม่ให้สตริงของฉันทุกเวลาที่ผมเรียก วิธีที่ง่ายที่สุดในการทำสิ่งนี้ใน Python คืออะไร?

คำตอบ:


294

ใช้ "\ n":

file.write("My String\n")

ดูคู่มือ Pythonสำหรับการอ้างอิง


3
หากคุณใช้ตัวแปรในการเขียนบันทึกคุณสามารถเพิ่ม + "\ n" ที่ส่วนท้ายเช่น fileLog.write (var1 + var2 + "\ n")
Filipe

4
ใน Python เวอร์ชันใหม่กว่า (3.6+) คุณสามารถใช้ f-strings:file.write(f"{var1}\n")
halfdan

109

คุณสามารถทำได้สองวิธี:

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

หรือขึ้นอยู่กับเวอร์ชัน Python ของคุณ (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 ลงในไฟล์รับมือแต่ละรายการเริ่มต้นที่เส้นใหม่
kaushik

2
@kaushik: f.write ('\ n'.join (x)) หรือ f.writelines (i +' \ n 'สำหรับ i ใน x)
Steven

ฉันคิดว่าวิธี f.write นั้นดีกว่าเพราะสามารถใช้ได้ทั้ง Python 2 และ 3
Dang Manh Truong

78

คุณสามารถใช้ได้:

file.write(your_string + '\n')

3
คุณอาจใช้การใช้งานตัวอย่างเช่นเมื่อคุณเขียน int ไปยังไฟล์คุณสามารถใช้ file.write (str (a) + '\ n')
未来陆家嘴顶尖的投资人

@xikhari ทำไม file.write(f"my number is: {number}\n")ทำได้ดีและอ่านง่าย
Guimoute

25

ถ้าคุณใช้มันอย่างกว้างขวาง (เป็นจำนวนมากเขียนบรรทัด) คุณสามารถ subclass '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')

ตอนนี้มันมีฟังก์ชั่นเพิ่มเติม 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ในกรณีนี้เพราะก่อนอื่นคุณไม่จำเป็นต้องใช้และอย่างที่สองฟังก์ชั่น Python ทุกตัวจะคืนค่า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
การเปิดไฟล์ที่มี "a" เป็นพารามิเตอร์แทนที่จะเป็น "w" จะไม่เปลี่ยนฟังก์ชั่นการเขียนเพื่อทำงานในแบบที่คุณอธิบาย ผลกระทบเดียวที่มีคือไฟล์จะไม่ถูกเขียนทับและข้อความจะถูกเพิ่มลงในบรรทัดล่างสุดแทนที่จะเริ่มที่มุมบนซ้ายของไฟล์เปล่า
เคลื่อนไหวประชาธิปไตย

2

เพียงแค่บันทึกfileไม่ได้รับการสนับสนุนPython 3และถูกลบออก คุณสามารถทำเช่นเดียวกันกับopenฟังก์ชั่นในตัว

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

2

ยกเว้นว่าเขียนลงในไฟล์ไบนารีให้ใช้การพิมพ์ ตัวอย่างด้านล่างนี้เหมาะสำหรับการจัดรูปแบบไฟล์ csv:

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 เป็นตัวแยกอย่างเป็นระบบ มันเขียนโดยใช้รายการของสตริงที่แต่ละสตริงเป็นหนึ่งบรรทัดของไฟล์อย่างไรก็ตามดูเหมือนว่ามันจะทำงานให้คุณเช่นกัน (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 ""

ทำไมไม่ง่าย ๆwith open(path, "w") as file: for line in strList: file.write(line + "\n")? วิธีนี้คุณสามารถลบรายการงานทั้งหมดการตรวจสอบและมีเพียง 3 บรรทัด
Guimoute
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.