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:
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:
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:
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.