Python io – BytesIO, StringIO

Moduł Python io pozwala nam na zarządzanie operacjami wejścia i wyjścia związanymi z plikami. Zaletą korzystania z modułu IO jest to, że dostępne klasy i funkcje pozwalają nam rozszerzyć funkcjonalność, aby umożliwić zapis do danych Unicode.

Moduł IO Pythona

Istnieje wiele sposobów, w jaki możemy wykorzystać moduł io do wykonywania operacji na strumieniu i buforze w Pythonie. Zademonstrujemy tutaj wiele przykładów, aby to udowodnić. Zacznijmy.

Python BytesIO

Podobnie jak to, co robimy ze zmiennymi, dane mogą być przechowywane jako bajty w buforze w pamięci, gdy używamy operacji Byte IO modułu io.

Tutaj jest przykładowy program, który to zademonstruje:

import iostream_str = io.BytesIO(b"JournalDev Python: \x00\x01")print(stream_str.getvalue())

Zobaczmy dane wyjściowe dla tego programu:
python IO BytesIO przykład
Funkcja getvalue() po prostu pobiera wartość z Bufora jako String.

Python StringIO

Możemy nawet użyć StringIO, który jest bardzo podobny w użyciu do BytesIO. Oto przykładowy program:

import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()

Zobaczmy dane wyjściowe dla tego programu:
python StringIO example
Zauważ, że nawet zamknęliśmy bufor po tym, jak skończyliśmy z buforem. Pomaga to zaoszczędzić pamięć buforów, ponieważ przechowują one dane w pamięci.

Ponadto, użyliśmy metody print z opcjonalnym argumentem do określenia strumienia IO zmiennej, co jest doskonale kompatybilne z instrukcją print.

Odczytywanie przy użyciu StringIO

Jak już zapiszemy jakieś dane do bufora StringIO, możemy je również odczytać. Przyjrzyjmy się fragmentowi kodu:

import ioinput = io.StringIO('This goes into the read buffer.')print(input.read())

Zobaczmy dane wyjściowe dla tego programu:
python io module read stringIO data

Odczyt pliku za pomocą StringIO

Możliwe jest również odczytanie pliku i strumieniowanie go przez sieć jako Bytes. Moduł io może być użyty do konwersji pliku multimedialnego, takiego jak obraz, na bajty. Poniżej znajduje się przykładowy program:

import iofile = io.open("whale.png", "rb", buffering = 0)print(file.read())

Zobaczmy wyjście dla tego programu:

Aby ten program został uruchomiony, musieliśmy mieć obraz whale.png obecny w naszym bieżącym katalogu.

io.open() vs os.open()

Funkcja io.open() jest preferowanym sposobem wykonywania operacji wejścia/wyjścia, ponieważ została stworzona jako wysokopoziomowy interfejs do wykonywania operacji wejścia/wyjścia plików. Zawija ona deskryptor pliku na poziomie OS w obiekt, którego możemy użyć do uzyskania dostępu do pliku w sposób Pythoniczny.

Funkcja os.open() zajmuje się niższym poziomem POSIX syscall. Przyjmuje argumenty wejściowe oparte na POSIX i zwraca deskryptor pliku, który reprezentuje otwarty plik. Nie zwraca obiektu pliku; zwrócona wartość nie będzie miała read() ani write() funkcji.

Ogółem, io.open() funkcja jest tylko opakowaniem nad os.open() funkcją. Funkcja os.open() również ustawia domyślny config jak flagi i tryb, podczas gdy io.open() tego nie robi i zależy od wartości przekazanych do niej.

Podsumowanie

W tej lekcji, studiowaliśmy proste operacje pythonowego modułu IO i jak możemy zarządzać znakami Unicode z BytesIO. Jednakże, jeśli szukasz kompletnych operacji na plikach, takich jak usuwanie i kopiowanie pliku, przeczytaj python read file.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *