Wykład 6.
● Pliki tekstowe
● Pliki rekordów
● Pliki CSV
● Strumienie
Operacje na plikach Otwarcie i zamknięcie pliku:
● fh = open('plik', 'r')
Atrybuty:
● 'r' – odczyt
● 'w' – zapis
● 'a' – dopisanie
● 'r+' - odczyt i zapis
● 'rb', 'wb', 'ab' – odczyt i zapis binarny (tylko Windows i Macintosh)
fh.close()
● fh.read() - odczyt całego pliku
● fh.read(size) - odczyt tylko size znaków, gdy koniec pliku zwracane jest “”
● fh.readline() - zwraca wiersz, razem z '\n'
● fh.readlines() - zwraca listę wierszy
przykład
fh = open('test.py', 'r')
while True:
wiersz = fh.readline()
if len(wiersz) == 0: break
print wiersz,
fh.close()
przykład poprawiony
fh = open('test.py', 'r')
for wiersz in fh:
print wiersz,
fh.write('dane zapisywane do pliku\n') fh.writelines(['to\n', 'są\n',
'kolejne\n', 'wiersze\n'])
● Pliki tekstowe
● Pliki z rekordami
● Pliki CVS
● Pliki *.ini
● XML
● ...
Rekord 0
Rekord 1
Rekord 2
Rekord 3
REKORD
int
char[16]
char[40]
bool float
data
string <-- rekord
import struct
numrec, lenheader =
struct.unpack('<xxxxLH22x', f.read(32)) name, typ, size, deci =
struct.unpack('<11sc4xBB14x', rec)
string --> rekord
hdr = struct.pack('<BBBBLHH20x', ver, yr, mon, day, numrec, lenheader, lenrecord)
● <liczba> - powtórzenie
● 'x' – nieistotny bajt, np. '4x' == 'xxxx'
● 'c' – znak
● 'i' – int
● 's', 'p' – stringi
Dodatkowe znaki:
● '<' - little endian
● '>' - big endian
Pakiet dbf
Przechowywanie obiektów w pliku import pickle
fh = open('plik.obj', 'w')
pickle.dump(obj, fh)
fh.close()
Odczyt obiektu z pliku import pickle
fh = open('plik.obj', 'r')
obj = pickle.load(fh)
fh.close()
Odczyt ze standardowego wejścia
● x = raw_input('Podaj jakiekolwiek dane: ')
● Wczytanie i obliczenie
x = input('Podaj wyrażenie')
print x
Bardziej zaawansowana interakcja Pakiet readline:
● Odczyt i zapis histori
● Uzupełnianie
Plik .gnome2/gedit-2:
[window]
height=487
width=601
state=0
[time_plugin]
prompt_type=1
import ConfigParser
ini = ConfigParser.ConfigParser() print ini.sections()
print ini.getint('window', 'height') print ini.items('window')
Modyfikacja parametrów:
ini.set('window', 'height', 100)
Usuwanie:
ini.remove_option('window', 'height') ini.remove_section('window')
Zapis konfiguracji fh = open('konfig.ini', 'w')
ini.write(fh)
fh.close()
CSV – Comma Separated Values
● Dane
“imie1”, “nazwisko1”, 2000-01-01, 3
“imie2”, “nazw3”, 2006-04-01, 2
● Notowania giełdowe
2006-04-26;1415.79;183.29;102.14; 2006-04-25;1415.88;183.43;102.31;
● delimiter – separator, np. ',' ';' ':'
● lineterminator – koniec wiersza
● quotechar – znak cudzysłowu
● quoting – kiedy ujmować pola w cudzysłów, QUOTE_ALL, QUOTE_NONNUMERIC,
QUOTE_NONE
Dialekt: domyślne parametry, np. dialekt excel Możliwość dodania własnego dialektu
Odczyt CSV -przykład import csv
reader = csv.reader(
open('/etc/passwd', 'r'),
delimiter=':',
quoting=csv.QUOTE_NONE)
for row in reader:
print row
przykład
import csv
data = [ [1, 'Oskar'], [2, 'Mis'] ]
writer = csv.writer(
open('out', "w"),
dialect=csv.excel)
writer.writerows(data)
Data;FS;FO;FOE;FSW;FZ;FPA;FRP;FANE; 2006-05-05;1416.17;183.01;101.80;123.63; 2006-05-04;1416.03;183.11;101.95;123.48; 2006-05-02;1415.79;183.06;101.93;123.43;
CSV słowniki - przykład fh = open('notowania.csv', "r") reader = csv.DictReader(fh, delimiter=';') for row in reader:
for k in row.keys():
print k, row[k]
Własne klucze:
fh = open('notowania.csv', "r") klucze = ['lp', 'name']
reader = csv.DictReader(fh, fieldnames= klucze) for row in reader:
print row['lp'], row['name']
Strumienie - motywacje def przegladaj_notowania(zrodlo): reader = csv.DictReader(zrodlo, delimiter=';') for row in reader:
for k in row.keys():
print k, row[k]
Strumienie - motywacje przegladaj_notowania('dane.csv')
url = 'http://www.notowania.pl/dane.csv'
przegladaj_notowania(url)
● Plik dyskowy
● Sieć
● Zmienna typu string
● ...
Własności strumieni Implementacja metod:
● read()
● read(size)
def przegladaj_notowania(zrodlo): reader = csv.DictReader(zrodlo, delimiter=';') for row in reader:
for k in row.keys():
print k, row[k]
Plik dyskowy jako strumień in_stream = open('dane.csv', 'r') przegladaj_notowania(in_stream)
in_stream.close()
import url ib
url = 'http://www.notowania.pl/dane.csv'
in_stream = url ib.urlopen(url)
przegladaj_notowania(in_stream)
in_stream.close()
String jako strumień Str = '2006-11-13;12.45;45.78'
import StringIO
in_stream = StringIO.StringIO(str) przegladaj_notowania(in_stream)
in_stream.close()
Na koniec