13

Правильный способ записи строки в файл?

18

У меня есть вопрос о том, как записать строку в файл в современном Python. Я услышал, что следующий способ считается устаревшим:

print >>f, "hi there"

Также меня интересует, работает ли "\n" на всех платформах, или мне следует использовать "\r\n" на Windows?

5 ответ(ов)

0

Что касается os.linesep:

Вот точная, неотредактированная сессия интерпретатора Python 2.7.1 на Windows:

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.linesep
'\r\n'
>>> f = open('myfile','w')
>>> f.write('hi there\n')
>>> f.write('hi there' + os.linesep) # тот же результат, что и в предыдущей строке ?????????
>>> f.close()
>>> open('myfile', 'rb').read()
'hi there\r\nhi there\r\r\n'
>>>

На Windows:

Как и ожидалось, os.linesep НЕ дает такой же результат, как '\n'. Никак не может быть так, что 'hi there' + os.linesep эквивалентно 'hi there\n'. На самом деле, 'hi there' + os.linesep равно 'hi there\r\n', что НЕ эквивалентно 'hi there\n'.

Все очень просто: используйте \n, который будет автоматически преобразован в os.linesep. И так было, начиная с первого порта Python для Windows.

Нет смысла использовать os.linesep на системах, отличных от Windows, и он дает неправильные результаты на Windows.

НЕ ИСПОЛЬЗУЙТЕ os.linesep!

0

В Python 3 print является функцией, в то время как в Python 2 — это оператор. Однако, если вы хотите использовать синтаксис функции print в Python 2, вы можете добавить следующую строку в начало вашего исходного файла:

from __future__ import print_function

После этого вы сможете использовать print как функцию, например:

print("hi there", file=f)

Это позволит вам использовать более современный синтаксис и делать ваш код более совместимым с Python 3.

0

Когда вы говорите о строке (Line), вы имеете в виду последовательность символов, которая заканчивается символом новой строки ('\n'). Строка должна заканчиваться в какой-то момент, поэтому мы должны учитывать символ '\n' в конце каждой строки. Вот решение:

with open('YOURFILE.txt', 'a') as the_file:
    the_file.write("Hello")

В режиме добавления (append mode) после каждой записи курсор перемещается на новую строку. Если вы хотите использовать режим 'w', вам нужно добавить символы '\n' в конце функции write():

the_file.write("Hello\n")

Таким образом, в режиме 'w' вы должны явно указывать символ новой строки, чтобы правильно форматировать ваши записи.

0

Если вы хотите избежать использования write() или writelines() и соединять строки с помощью \n самостоятельно, вы можете передать все ваши строки в print(), указав разделитель новой строки и файловый дескриптор в качестве аргументов ключевых слов. Этот фрагмент предполагает, что ваши строки не содержат завершающих символов новой строки.

print(line1, line2, sep="\n", file=f)

Вам не нужно вставлять специальный символ новой строки в конце, так как print() делает это за вас.

Если у вас есть произвольное количество строк в списке, вы можете использовать распаковку списка, чтобы передать их все в print().

lines = ["The Quick Brown Fox", "Lorem Ipsum"]
print(*lines, sep="\n", file=f)

Использование "\n" в качестве разделителя допустимо на Windows, потому что print() также автоматически преобразует его в Windows-формат новой строки CRLF ("\r\n").

0

Если вы хотите вставить элементы в список с заданным форматом, построчно, вы можете начать с такого кода:

with open('somefile.txt', 'a') as the_file:
    for item in items:
        the_file.write(f"{item}\n")

Здесь мы открываем файл somefile.txt в режиме добавления ('a'), что позволяет вам записывать данные в конец файла. Затем с помощью цикла for мы проходим по всем элементам в списке items и записываем каждый элемент в файл, добавляя символ переноса строки (\n) после каждого элемента, чтобы каждый элемент был на новой строке.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь