Kod:
file('pinax/media/a.jpg', 'wb')
open
zamiast file
, który został wycofany w Pythonie 2 i usunięty w Pythonie 3. Zobacz stackoverflow.com/questions/112970/ ...
Kod:
file('pinax/media/a.jpg', 'wb')
open
zamiast file
, który został wycofany w Pythonie 2 i usunięty w Pythonie 3. Zobacz stackoverflow.com/questions/112970/ ...
Odpowiedzi:
Tryb plików , zapis i binarny. Ponieważ piszesz plik .jpg, wygląda dobrze.
Ale jeśli masz przeczytać ten plik jpg, musisz użyć 'rb'
Więcej informacji
W systemie Windows „b” dołączone do trybu otwiera plik w trybie binarnym, więc są też tryby, takie jak „rb”, „wb” i „r + b”. Python w systemie Windows rozróżnia pliki tekstowe i binarne; znaki końca linii w plikach tekstowych są automatycznie nieznacznie zmieniane, gdy dane są odczytywane lub zapisywane. Ta zakulisowa modyfikacja danych plików jest dobra w przypadku plików tekstowych ASCII, ale spowoduje uszkodzenie danych binarnych, takich jak w plikach JPEG lub EXE.
fd.write("foo\n")
faktycznie zapisuje na dysku foo\r\n
(zwróć uwagę na \r
).
Symbol wb
wskazuje, że plik jest otwierany do zapisu w trybie binarnym.
Podczas pisania w trybie binarnym Python nie wprowadza żadnych zmian w danych, gdy są one zapisywane do pliku. Jednak w trybie tekstowym (gdy b
jest wykluczone, jak w just w
lub gdy określisz tryb tekstowy za pomocą wt
), jednak Python zakoduje tekst w oparciu o domyślne kodowanie tekstu. Ponadto Python przekonwertuje zakończenia linii ( \n
) na dowolne zakończenie linii specyficzne dla platformy, co mogłoby uszkodzić plik binarny, taki jak exe
lub png
.
Dlatego podczas pisania plików tekstowych należy używać trybu tekstowego (niezależnie od tego, czy używa się zwykłego tekstu, czy formatu tekstowego, takiego jak CSV), natomiast tryb binarny należy używać podczas pisania plików nietekstowych, takich jak obrazy.
Bibliografia:
https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open
wb
opcją. Korzystając z tej w
opcji, udało mi się sprawić, by działał poprawnie.
b
tryb ma wpływ tylko na Windows. Zostało to teraz usunięte z dokumentacji i tryb binarny „powinien być używany dla wszystkich plików, które nie zawierają tekstu”.
To jest tryb, w którym otwierasz plik. „wb” oznacza, że piszesz do pliku (w) i że piszesz w trybie binarnym (b).
Sprawdź dokumentację, aby uzyskać więcej informacji: clicky
open
zamiastfile
.file
został uznany za przestarzały w Pythonie 2 (nie można znaleźć wersji) i został usunięty w py3k. (dzięki Scott) Zobacz to pytanie, aby uzyskać więcej informacji.