Як я можу писати у файли за допомогою Python (у Windows) та використовувати символ кінця рядка Unix?
наприклад, виконуючи:
f = відкрити ('file.txt', 'w') f.write ('привіт \ n') f.close ()
Python автоматично замінює \n
на \r\n
.
Відповіді:
Дивіться: Сучасний спосіб: використовуйте відповідь newline = '' саме на цій сторінці.
Відкрийте файл як двійковий файл, щоб запобігти перекладу символів кінця рядка:
f = open('file.txt', 'wb')
Цитування інструкції з Python:
У Windows доданий до режиму 'b' відкриває файл у двійковому режимі, тому існують також такі режими, як 'rb', 'wb' та 'r + b'. Python у Windows розрізняє текстові та двійкові файли; символи кінця рядка в текстових файлах автоматично дещо змінюються при читанні чи записі даних. Ця позакулісна модифікація файлових даних чудово підходить для текстових файлів ASCII, але вона пошкоджує двійкові дані, такі як файли JPEG або EXE. Будьте дуже обережні, використовуючи двійковий режим під час читання та запису таких файлів. У Unix не заважає додавати в режим "b", тому ви можете використовувати його незалежно від платформи для всіх двійкових файлів.
Використовуйте newline=
параметр ключового слова для io.open (), щоб використовувати кінцеві термінатори LF стилю Unix:
import io
f = io.open('file.txt', 'w', newline='\n')
Це працює в Python 2.6+. У Python 3 ви також можете використовувати параметр вбудованої open()
функції newline=
замість io.open()
.
Старий спосіб запобігти перетворенню нового рядка, який не працює в Python 3, - це відкрити файл у двійковому режимі, щоб запобігти перекладу символів кінця рядка:
f = open('file.txt', 'wb') # note the 'b' meaning binary
але в Python 3 двійковий режим буде читати байти, а не символи, тому він не буде робити те, що ви хочете. Ви, мабуть, отримаєте винятки, коли спробуєте зробити рядок вводу-виводу в потоці. (наприклад, "TypeError: 'str' не підтримує інтерфейс буфера").
'\n'
прямий, це більш чітко, ніж ''
, і я думаю, що його легше прочитати.
'\n'
є зрозумілішим, ніж ''
. Тоді мені не знадобиться коментар, щоб пояснити, що робить код :) Але майте на увазі, що це справедливо лише для написання файлів. Під час читання файлів newline='\n'
це не зовсім те саме, що newline=''
, оскільки readlines()
буде розділено лише на \n
попередній випадок, але разом з newline=''
цим буде виконувати універсальну обробку нового рядка, але все одно повертатиме фактичні нові рядки з файлу в даних. Дякую за пропозицію! Програма тестування Python
'\n'
що було переключено раніше, ви можете скористатися кодовою точкою Unicode (переконайтеся, що кодування має utf-8 або щось інше). with open('file.txt', 'w', encoding='utf-8', newline='\u000A')
; PS Результат нічим не відрізняється від newline='\n'
версії, це просто, якщо хтось хоче трохи комфорту.
Вам потрібно буде використовувати двійковий псевдорежим під час відкриття файлу.
f = open('file.txt', 'wb')