• Nie Znaleziono Wyników

Operacje wejścia/wyjścia

N/A
N/A
Protected

Academic year: 2022

Share "Operacje wejścia/wyjścia"

Copied!
16
0
0

Pełen tekst

(1)

Operacje wejścia/wyjścia

Pliki

(2)

fp = open("tmp.txt", "w")

# pozostałe instrukcje programu

# wymagane zamknięcie pliku fp.close()

Pliki - Otwarcie/Zamknięcie pliku

Otwarcie pliku realizowane jest za pomocą funkcji open() przyjmującej dwa

argumenty_-_nazwę pliku i_tryb otwarcia, funkcja ta_zwraca obiekt,

który_pozwala na wykonanie podstawowych operacji

na_pliku.

Zamknięcie pliku

(3)

Pliki - Otwarcie/Zamknięcie pliku

Tryb otwarcia pliku określa sposób, w jaki plik będzie używany. Możliwymi trybami są:

r - plik będzie tylko odczytywany,

r+ - dane z/do pliku będą odczytywane i zapisywane,

w - dane do pliku będą zapisywane (jeśli plik istnieje jego zawartość zostanie usunięta,

a - dane do pliku będą dopisywane (jeśli plik istnieje jego zawartość nie zostanie usunięta).

W przypadku dopisania do trybu litery b, plik zostanie otwarty w trybie binarnym.

(4)

fp = open("tmp.txt", "w")

# pozostałe instrukcje programu

# wymagane zamknięcie pliku fp.close()

Pliki - Otwarcie/Zamknięcie pliku

Jakie problemy istnieją w_tym rozwiązaniu?

(5)

fp = open("tmp.txt", "w")

# pozostałe instrukcje programu

# wymagane zamknięcie pliku fp.close()

Pliki - Otwarcie/Zamknięcie pliku

Jakie problemy istnieją w_tym rozwiązaniu?

Problem:

Co się stanie jeśli zapomnimy wywołać funkcji close()?

(6)

with open("tmp.txt", "w") as fp:

# kod operujący na pliku pass

# w tym miejscu plik jest zamknięty

Pliki - Konstrukcja with

Specjalna konstrukcja with automatycznie zamyka plik po zakończeniu wykonywania bloku kodu.

(7)

with open("tmp.txt") as fp:

text = fp.read()

print("Zawartość pliku:", text)

Pliki - Odczyt/Zapis danych

Wczytanie całego pliku do_zmiennej można uzyskać poprzez wywołanie funkcji read() na obiekcie

reprezentującym plik.

Nazwa text będzie wskazywała na napis w_postaci ciągu znaków (string).

(8)

# odczytanie zawartości pliku linia po linii with open("tmp.txt") as fp:

line = fp.readline() while line != '':

print("Linia z pliku: ", line) line = fp.readline()

Pliki - Odczyt/Zapis danych

Odczytanie pojedynczej linii z_pliku możliwe

jest_za_pomocą funkcji readline().

W przypadku napotkania na_koniec pliku funkcja zwraca pusty napis.

(9)

# odczytanie zawartości pliku linia po linii with open("tmp.txt") as fp:

for line in fp:

print("Linia z pliku: ", line)

Pliki - Odczyt/Zapis danych

Odczytanie kolejnych linii z_pliku może być

zrealizowane za pomocą pętli for.

(10)

with open("tmp.txt") as fp:

lines = list(fp) print(lines)

with open("tmp.txt") as fp:

lines = fp.readlines() print(lines)

Pliki - Odczyt/Zapis danych

Za pomocą konstruktora list() oraz funkcji readlines() można wczytać wszystkie linie z_pliku do listy.

(11)

Pliki - Odczyt/Zapis danych

Dane odczytane z pliku otwartego w trybie binarnym zwracane są w postaci ciągu bajtów, by_zamienić je na ciąg znaków (string) muszą zostać zdekodowane.

bytes.decode(encoding="utf-8", errors="strict")

bytearray.decode(encoding="utf-8", errors="strict")

Return a string decoded from the given bytes. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. The default for errors is 'strict', meaning that encoding errors

(12)

with open("tmp.txt", "w") as fp:

fp.write("plik testowy\nwieloliniowy")

Pliki - Odczyt/Zapis danych

Zapisanie ciągu znaków do pliku odbywa się za pomocą funkcji write()

wywoływanej na obiekcie reprezentującym plik.

(13)

Pliki - Odczyt/Zapis danych

Dane zapisywane do pliku otwartego w trybie binarnym muszą być w postaci ciągu bajtów, by_zamienić ciąg znaków (string) na ciąg bajtów należy napis zakodować.

str.encode(encoding="utf-8", errors="strict")

Return an encoded version of the string as a bytes object. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. The default for errors is 'strict', meaning that

encoding errors raise a UnicodeError. Other possible values are 'ignore', 'replace',

'xmlcharrefreplace', 'backslashreplace' and any other name registered via codecs.register_error(),

(14)

Pytania

1. Za co odpowiada instrukcja with w przypadku operacji na plikach?

2. W jaki sposób wczytać wszystkie linie z pliku do listy?

(15)

Literatura

1. Input and Output - Reading and Writing Files,

https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

(16)

Cytaty

Powiązane dokumenty

Utworzyć folder na pulpicie (nazwa: imię i nazwisko studenta), wewnątrz utworzyć podfolder o nazwie HelloWorld. Napisać program wyświetlający na ekranie napis Hello

- jeśli wykonanie zakończyło się poprawnie, to zwraca wskazanie do łańcucha buf; jeśli napotka znacznik końca pliku albo gdy wystąpił błąd, to zwraca

 Metoda przeglądania - dane są wymieniane miedzy procesorem a modułem we/wy, procesor czeka na zakończenie operacji we/wy, sprawdzana jest gotowość/zajętość

Wskaźnik stosu jest dekrementowany o jeden kiedy dane są odkładane na stos przez instrukcję PUSH i jest dekrementowany o dwa (lub 3 dla procesora ATMega256)

Zagadnienia: specyfikacja funkcji, operacje wejścia i wyjścia na plikach, for- matowane wejście i wyjście, struktury sterujące, rekurencja, nie- bezpieczeństwa rekurencji,

• by zapisać znak do pliku wskazywanego przez plik należy użyć funkcji int putc(int znak, FILE *plik), która zwraca wartość tego znaku lub EOF jako sygnał wystąpienia

• by zapisać znak do pliku wskazywanego przez plik należy użyć funkcji int putc(int znak, FILE *plik), która zwraca wartość tego znaku lub EOF jako sygnał wystąpienia

Zagadnienia: specyfikacja funkcji, operacje wejścia i wyjścia na plikach, for- matowane wejście i wyjście, struktury sterujące, rekurencja, nie- bezpieczeństwa rekurencji,