Відкрийте файли в режимах 'rt' та 'wt'


108

Кілька разів тут на SO я бачив людей, які використовують rtта wtрежими для читання та запису файлів.

Наприклад:

with open('input.txt', 'rt') as input_file:
     with open('output.txt', 'wt') as output_file: 
         ...

Я не бачу режимів задокументованими , але оскільки open()не призводить до помилок - схоже, це досить легально.

Для чого це та чи є різниця між використанням wtvs wі rtvs r?

Відповіді:


193

tвідноситься до текстового режиму. Немає різниці між rта rtабо wта wtоскільки текстовий режим є типовим.

Документовано тут :

Character   Meaning
'r'     open for reading (default)
'w'     open for writing, truncating the file first
'x'     open for exclusive creation, failing if the file already exists
'a'     open for writing, appending to the end of the file if it exists
'b'     binary mode
't'     text mode (default)
'+'     open a disk file for updating (reading and writing)
'U'     universal newlines mode (deprecated)

Режим за замовчуванням - 'r'(відкритий для читання тексту, синонім 'rt').


4
Поняття, це задокументовано в документах python3. Отже, різниці між wtvs wі rtvs в основному немає r- просто explicit is better than implicit?
alecxe

@alecxe Право, оскільки текстовий режим є типовим, немає різниці між rі rt...
devnull

9
Зверніть увагу, що wне завжди дорівнює wt. Одним із таких випадків є те, що gzip.openбінарний режим за замовчуванням, а не текстовий режим. Пов'язаний питання: stackoverflow.com/questions/42013083 / ...
Карл Екерот

9

tУказует текстовий режим, а це означає , що \nсимволи будуть переведені на закінчення хоста OS рядки при запису в файл і назад при читанні. Прапор - це лише шум, оскільки текстовий режим є типовим.

Крім того U, ці прапори режимів надходять безпосередньо від функції стандартної бібліотеки С fopen(), факт, який зафіксований у шостому абзаці документації python2 для open().

Наскільки я знаю, tвона не є і ніколи не була частиною стандарту С, тому, хоча багато реалізацій бібліотеки C це все одно приймають, немає жодної гарантії, що всі вони будуть, а отже, немає гарантії, що вона буде працювати над кожною складовою пітон. Це пояснює, чому документи python2 не перерахували його, і чому він взагалі працював. Документи python3 роблять це офіційним.


4

'R' - для читання, 'w' для написання, а 'a' - для додавання.

'T' означає текстовий режим, призначений для двійкового режиму.

Кілька разів тут на SO я бачив людей, які використовують режим rt та wt для читання та запису файлів.

Редагувати: Ви впевнені, що бачили rt, а не rb?

Ці функції, як правило, охоплюють функцію fopen, яка описана тут:

http://www.cplusplus.com/reference/cstdio/fopen/

Як ви бачите, згадується використання b для відкриття файлу у двійковому режимі.

Надане вами посилання на документ також посилається на цей режим b:

Додавання "b" корисно навіть у системах, які не розглядають бінарні та текстові файли по-різному, де вони служать документацією.


Так, це було зрозуміло rt, наприклад, stackoverflow.com/questions/10971033/… або stackoverflow.com/questions/17127853/… тощо. Дякую за інформацію, добре знати.
alecxe

У посиланні, яке надає devnull, вказана текстова опція 't'. Що мене здивувало тим, що посилання C ++ також не згадувало про цей варіант 't', оскільки я впевнений, що я використав варіанти 'rt' та 'wt' у коді C fopen, написаному років тому.
jussij

Так, саме тому я запитав - це було для мене як недокументована функція. Сподіваюся, нитка допоможе комусь у майбутньому. Знову дякую.
alecxe

3

t вказує на text mode

https://docs.python.org/release/3.1.5/library/functions.html#open

в Linux немає різниці між текстовим і бінарним режимом, однак у Windows вони перетворюються \nна \r\nтекстовий режим.

http://www.cygwin.com/cygwin-ug-net/using-textbinary.html


5
У Python 3 є додаткова різниця між текстовим та бінарним режимами файлів (на всіх платформах). У текстовому режимі readповертає рядки Unicode. У двійковому режимі readповертає bytesекземпляр. Якщо ви хочете написати код Python 2, маючи на увазі сумісність форвардів, ви можете скористатися, io.openа не стандартним, openдля отримання поведінки Python 3 ( unicodeпроти strекземплярів).
Blckknght
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.