Запись строки в файл на новой строке каждый раз

259

Я хочу добавлять новую строку к моей строке каждый раз, когда я звоню file.write(). Какой самый простой способ сделать это в Python?

Кошик
источник

Ответы:

294

Используйте "\ n":

file.write("My String\n")

Смотрите руководство по Python для справки.

Хафдан
источник
3
Если вы используете переменные для создания записи, вы можете добавить + "\ n" в конце, например, fileLog.write (var1 + var2 + "\ n").
Филипе
4
В новых версиях Python (3.6+) вы также можете просто использовать f-строки: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.writelines (str (x)) для записи в файл, где x - это список, чтобы теперь сказать, как записать список x в файл, который обрабатывает каждый список, начиная с новой строки
kaushik
2
@kaushik: f.write ('\ n'.join (x)) или f.writelines (i +' \ n 'для i in x)
Стивен,
Я думаю, что метод f.write лучше, поскольку его можно использовать как в Python 2, так и в 3.
Dang
78

Ты можешь использовать:

file.write(your_string + '\n')
Кришна К
источник
3
вы можете использовать использование, например, когда вы записываете int в файл, вы можете использовать file.write (str (a) + '\ n')
May 陆家嘴 顶尖 的 投资 人
@xikhari Почему? file.write(f"my number is: {number}\n")это просто хорошо и читабельно.
Гимут
25

Если вы используете его широко (много письменных строк), вы можете создать подкласс '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, ...) или что последняя строка также заканчивается новой строкой, но это работает для меня.

mathause
источник
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')
user1767754
источник
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])

Ноты:

Mesco
источник
2

Другое решение, которое пишет из списка, используя fstring

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')
citynorman
источник
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 ""
democidist
источник
Почему не просто with open(path, "w") as file: for line in strList: file.write(line + "\n")? Таким образом, вы можете удалить все списки работы, проверки и всего 3 строки.
Гимут