[ Pobierz całość w formacie PDF ]
3.14159265359
Użycie operatora%wygląda następująco:
>>> import math
>>> print Wartością PI jest w przybliżeniu %5.3f. % math.pi
Wartością PI jest w przybliżeniu 3.142.
Jeżeli podano więcej niż jeden format w napisie, jako prawy operand podaje się krotkę wartości, np.:
46 Rozdział 7. Wejście i wyjście
>>> tabela = { Sjoerd : 4127, Jack : 4098, Dcab : 7678}
>>> for nazwa, telefon in tabela.items():
... print %-10s ==> %10d % (nazwa, telefon)
...
Jack ==> 4098
Dcab ==> 7678
Sjoerd ==> 4127
Większość formatów działa dokładnie tak samo jak w C i wymaga podania właściwego typu, aczkolwiek jeżeli
nie zastosuje się do tego, to w wyniku dostaje się wyjątek, a nie zrzut obrazu pamięci1 i przerwanie działania
programu. Format%sjest bardziej tolerancyjny: jeżeli odpowiadający mu argument nie jest napisem, przekształ-
cany jest w napis za pomocą wbudowanej funkcjistr(). Można użyć * do podania szerokości lub precyzji w
oddzielnym (liczba całkowita) argumencie. Formaty C%ni%pnie są obsługiwane.
Jeśli posiadasz już naprawdę długi napis formatujący, którego nie chce się dzielić, miło by było odnosić się wprost
do zmiennych będących formatowanymi, zamiast do ich pozycji na liście argumentów. Można to osiągnąć poprzez
użycie rozszerzenia w stosunku do formatów C w formie%(nazwa)format, tzn.:
>>> tabela = { Sjoerd : 4127, Jack : 4098, Dcab : 8637678}
>>> print Jack: %(Jack)d; Sjoerd: %(Sjoerd)d; Dcab: %(Dcab)d % tabela
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
Jest to szczególnie użyteczne w połączeniu z nową funkcją wbudowanąvars(), która zwraca słownik zawiera-
jÄ…cy wszystkie zmienne lokalne.
7.2 Czytanie z i pisanie do plików
open()zwraca obiekt pliku i powszechnie używana jest z dwoma argumentami: open(nazw_pliku, tryb) .
>>> f=open( /tmp/workfile , w )
>>> print f
Pierwszym argumentem jest napis zawierający nazwę pliku. Drugim jest następny napis zawierający parę znaków
opisujących sposób użycia pliku. tryb zawiera r , kiedy plik będzie tylko czytany2, w , gdy będzie odbywało
się wyłącznie pisanie do pliku (istniejący plik o tej nazwie zostanie zmazany), a a otwiera plik, do którego
można dodawać dane: dowolna dana zapisana do pliku będzie dodana na jego koniec. r+ otwiera plik zarówno
do czytania jak i do pisania. Argument tryb jest opcjonalny: w przypadku jego braku plik zostanie otwarty w
trybie r .
W systemach Windows i na macintoshach dodanie b do tryb powoduje otwarcie pliku w trybie binarnym, tak
więc możemy podać tryby rb , wb i r+b . Windows rozróżnia pliki tekstowe i binarne: znaki końca
linii w plikach tekstowych sÄ… automatycznie zmieniane, gdy dane sÄ… czytane lub pisane. Taka modyfikacja w
białych rękawiczkach pliku wydaje się być wygodna dla plików tekstowych zapisanych w kodzie ASCII, ale
zepsuje zawartość plików z danymi binarnymi jak np. pliki .EXE . Trzeba być ostrożnym stosując tryb binarny
przy czytaniu lub zapisie (trzeba jeszcze dodać, że dokładne znaczenie trybu tekstowego na macintoshu, zależy
od zastosowanej biblioteki C).
7.2.1 Metody obiektów pliku
W reszcie przykładów tego podrozdziału zakłada się, że stworzono już obiekt pliku o nazwief.
1
ang. core dump (przyp. tłum.)
2
ang. read-only (przyp. tłum.)
7.2. Czytanie z i pisanie do plików 47
Użyjf.read(ile), aby przeczytać jakąś liczbę danych i dostać je w postaci napisu. ile jest opcjonalnym argu-
mentem liczbowym. Kiedy ile jest pominięte lub ujemne, całą zawartość pliku zostanie przeczytana i zwrócona:
to twój problem, jeśli wielkość czytanego pliku dwukrotnie przewyższa wielkość pamięci twojego komputera.
W przypadku przeciwnym, co najwyżej ile bajtów zostanie przeczytanych i zwróconych. Jeśli osiągnięto koniec
pliku,f.read()zwróci pusty napis ().
>>> f.read()
To jest cały plik.\012
>>> f.read()
f.readline() czyta z pliku pojedynczy wiersz. Znak nowej linii (\n) umiejscowiony jest na lewym końcu
napisu i zostaje pominięty tylko w wypadku ostatniego wiersza pod warunkiem, że plik nie kończy się znakiem
nowego wiersza. Powoduje to powstanie niejednoznaczności w zwracanym napisie: jeżeli f.readline()
zwróci pusty napis osiągnęliśmy koniec pliku, podczas gdy pusta linia reprezentowana przez \n , tzn. napis
zawierajÄ…cy tylko znak nowej linii.
>>> f.readline()
To jest pierwsza linia pliku.\012
>>> f.readline()
Druga linia pliku.\012
>>> f.readline()
f.readlines()stosujef.readline()w sposób ciągły i zwraca listę napisów reprezentujących wszystkie
wiersze z pliku.
>>> f.readlines()
[ To jest pierwsza linia pliku.\012 , Druga linia pliku.\012 ]
f.write(napis)zapisuje zawartość napisu do pliku zawracającNone.
>>> f.write( To jest test\n )
f.tell()zwraca liczbę całkowitą oznaczającą bieżącą pozycję w pliku mierzoną w bajtach, licząc od początku
pliku. Aby zmienić tę pozycję użyj f.seek(przesuniecie, od_czego) . Nowa pozycja obliczana jest poprzez
dodanie przesuniecie do punktu odniesienia, a ten z kolei wyznaczony jest przez wartość argumentu od_czego.
[ Pobierz całość w formacie PDF ]