Kilka razy na SO widziałem ludzi używających trybów rt
i wt
do czytania i zapisywania plików.
Na przykład:
with open('input.txt', 'rt') as input_file:
with open('output.txt', 'wt') as output_file:
...
Nie widzę udokumentowanych trybów , ale ponieważ open()
nie generuje błędu - wygląda na to, że jest prawie legalny w użyciu.
Do czego służy i czy jest jakaś różnica między using wt
vs w
i rt
vs r
?
python
file
file-io
read-write
alecxe
źródło
źródło
wt
vsw
irt
vsr
- tylkoexplicit is better than implicit
?r
irt
...w
nie zawsze jest równewt
. Jednym z takich przypadków jestgzip.open
tryb binarny, a nie tryb tekstowy. Powiązane pytanie: stackoverflow.com/questions/42013083/…t
Wskazuje tryb tekstowy, co oznacza, że\n
znaki będą tłumaczone do zakończeń linii hosta OS podczas pisania do pliku i ponownie podczas czytania. Flaga jest w zasadzie tylko szumem, ponieważ tryb tekstowy jest domyślny.Poza
U
tym te flagi trybu pochodzą bezpośrednio z funkcji standardowej biblioteki Cfopen()
, co jest udokumentowane w szóstym akapicie dokumentacji python2 dlaopen()
.O ile wiem,
t
nie jest i nigdy nie był częścią standardu C, więc chociaż wiele implementacji biblioteki C i tak go akceptuje, nie ma gwarancji, że wszystkie będą, a zatem nie ma gwarancji, że będzie działać na każdej kompilacji pyton. To wyjaśnia, dlaczego dokumentacja python2 tego nie wymieniła i dlaczego i tak generalnie działała. Dokumentacja python3 czyni to oficjalnym.źródło
Litera „r” służy do czytania, „w” do pisania, a „a” do dołączania.
„T” oznacza tryb tekstowy w połączeniu z trybem binarnym.
Edycja: Czy na pewno widziałeś rt, a nie rb?
Te funkcje generalnie zawijają funkcję fopen, która jest opisana tutaj:
http://www.cplusplus.com/reference/cstdio/fopen/
Jak widać, wspomina o użyciu b do otwierania pliku w trybie binarnym.
Podane łącze do dokumentu odnosi się również do tego trybu b:
Dołączenie „b” jest przydatne nawet w systemach, które nie traktują inaczej plików binarnych i tekstowych, gdzie służy jako dokumentacja.
źródło
rt
, np. Stackoverflow.com/questions/10971033/… lub stackoverflow.com/questions/17127853/… itd. Dziękuję za informację, dobrze wiedzieć.t
wskazuje natext mode
https://docs.python.org/release/3.1.5/library/functions.html#open
w systemie Linux nie ma różnicy między trybem tekstowym a binarnym, jednak w systemie Windows konwertuje się
\n
na\r\n
tryb tekstowy when.http://www.cygwin.com/cygwin-ug-net/using-textbinary.html
źródło
read
zwraca ciągi Unicode. W trybie binarnymread
zwracabytes
instancję. Jeśli chcesz napisać kod Python 2 z myślą o kompatybilności w przód, możesz użyćio.open
zamiast standardu,open
aby uzyskać zachowanie Python 3 (zunicode
kontrastr
instancjami).