Запис рядків у файл у новому рядку кожного разу


259

Я хочу додавати новий рядок до моєї строки щоразу, коли дзвоню file.write(). Який найпростіший спосіб зробити це в Python?

Відповіді:


294

Використовуйте "\ n":

file.write("My String\n")

Для ознайомлення дивіться посібник з Python .


3
Якщо ви використовуєте змінні для складання запису, ви можете додати + "\ n" в кінці, як fileLog.write (var1 + var2 + "\ n").
Філіпе

4
У новіших версіях Python (3.6+) ви також можете просто використовувати f-string:file.write(f"{var1}\n")
половина

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.writlines (str (x)), щоб записати у файл, де x є список, щоб тепер розповісти, як записати список x у файл, копіюючи кожен список, починаючи з нового рядка
kaushik

2
@kaushik: f.write ('\ n'.join (x)) або f.writlines (i +' \ n 'для i в x)
Стівен,

Я думаю, що метод 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")просто чудово і читабельно.
Гімуте

24

Якщо ви широко використовуєте його (багато написаних рядків), ви можете підкласировать "файл":

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

Тепер він пропонує додаткову функцію, яка виконує те, що ви хочете:

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" не змінює функцію write на роботу так, як ви описали. Єдиним ефектом є те, що файл не буде перезаписаний, а текст буде доданий до самого нижнього рядка замість того, щоб починати вгорі зліва порожнього файлу.
демоцидист

2

Просто примітка, fileне підтримується Python 3та видалено. Можна зробити те ж саме із openвбудованою функцією.

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

2

Якщо не записувати у двійкові файли, використовуйте print. Нижче приклад хороший для форматування файлів 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 рядки.
Гімуте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.