Jak mogę zapisać bajt w pliku Python 3 bez znajomości kodowania?


W Pythonie 2.x z obiektem „plikopodobnym”:
sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)

Jak zrobić to samo w Pythonie 3?
Jak napisać odpowiednik tego kodu w Pythonie 2.x:
def write(file_, bytes_):
file_.write(bytes_)

Uwaga:
sys.stdout
nie zawsze jest semantycznym strumieniem tekstowym. Czasami warto pomyśleć o tym jako o strumieniu bajtów. Na przykład,

stwórz zaszyfrowany katalog archiwum/na zdalnej maszynie
http://www.pixelbeat.org/cmdline.html
:
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'

W tym przypadku nie ma sensu używać Unicode.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To kwestia korzystania z interfejsów API, które działają z bajtami, a nie z ciągami.
sys.stdout.buffer.write(bytes_)

Jak wyjaśnić

dokumenty
http://docs.python.org/py3k/li ... stdin
możesz także
odłączyć
strumienie, aby były domyślnie binarne.
Powoduje to dostęp do głównego bufora bajtów.
tempfile.TemporaryFile().write(bytes_)

To jest już bajt API.
open('filename', 'wb').write(bytes_)

Jak można się spodziewać po „b”, jest to bajtowe API.
from io import BytesIO
BytesIO().write(bytes_)

BytesIO
to bajtowy odpowiednik
StringIO
.
EDYCJA:
write
działa tylko z dowolnymi plikami

dwójkowy

obiekt plikopodobny. Więc ogólnym rozwiązaniem jest po prostu znalezienie odpowiedniego API.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Określ tryb binarny „b” podczas otwierania pliku:
with open('myfile.txt', 'wb') as w:
w.write(bytes)

https://docs.python.org/3.3/li ... 3open
https://docs.python.org/3.3/li ... 3open

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się