
21.2.1 Kodowanie tekstu: ASCII, Unicode itp.

>>> open('test.txt', 'wb').write(bytes([65, 66, 67, 255, 192,193]))
6

>>> x = open('test.txt').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte


>>> open('test.txt', errors='ignore').read()
'ABC'
>>> open('test.txt', errors='replace').read()
'ABC���'
>>> open('test.txt', errors='surrogateescape').read()
'ABC\udcff\udcc0\udcc1'
>>> open('test.txt', errors='backslashreplace').read()
'ABC\\xff\\xc0\\xc1'
>>>

21.2.2 Tekst nieustrukturyzowany

>>> tadeusz_tekst = open('tadeusz.txt').read()          #A wczytanie całego tekstu jako jednego łańcucha znaków
>>> tadeusz_strofy = tadeusz_tekst.split("\n\n")       #B podział po dwóch znakach nowej linii
>>> print(tadeusz_strofy[1])
Panno Święta, co Jasnej bronisz Częstochowy
I w Ostrej świecisz Bramie! Ty co gród zamkowy
Nowogródzki ochraniasz z jego wiernym ludem!
Jak mnie dziecko do zdrowia powróciłaś cudem
(Gdy od płaczącej matki pod Twoję opiekę
Ofiarowany, martwą podniosłem powiekę
I zaraz mogłem pieszo do Twych świątyń progu
Iść za wrócone życie podziękować Bogu),
Tak nas powrócisz cudem na Ojczyzny łono.
Tymczasem przenoś moję duszę utęsknioną
Do tych pagórków leśnych, do tych łąk zielonych,
Szeroko nad błękitnym Niemnem rozciągnionych;
Do tych pól malowanych zbożem rozmaitem,
Wyzłacanych pszenicą, posrebrzanych żytem;
Gdzie bursztynowy świerzop, gryka jak śnieg biała,
Gdzie panieńskim rumieńcem dzięcielina pała,
A wszystko przepasane jakby wstęgą, miedzą
Zieloną, na niej z rzadka ciche grusze siedzą.



>>> tadeusz_tekst = open('tadeusz.txt').read()          #A wczytanie całego tekstu jako jednego łańcucha znaków
>>> tadeusz_strofy = tadeusz_tekst.split("\n\n")
>>> tadeusz = tadeusz_strofy[1].lower()                   #B zmiana na małe litery
>>> tadeusz = tadeusz.replace(".", "")          #C usunięcie kropek
>>> tadeusz = tadeusz.replace(",", "") 
>>> tadeusz_słowa = tadeusz.split()
>>> print(tadeusz_słowa)
['panno', 'święta', 'co', 'jasnej', 'bronisz', 'częstochowy', 'i', 'w', 'ostrej', 'świecisz', 'bramie!', 'ty', 'co', 'gród', 'zamkowy', 'nowogródzki', 'ochraniasz', 'z', 'jego', 'wiernym', 'ludem!', 'jak', 'mnie', 'dziecko', 'do', 'zdrowia', 'powróciłaś', 'cudem', '(gdy', 'od', 'płaczącej', 'matki', 'pod', 'twoję', 'opiekę', 'ofiarowany', 'martwą', 'podniosłem', 'powiekę', 'i', 'zaraz', 'mogłem', 'pieszo', 'do', 'twych', 'świątyń', 'progu', 'iść', 'za', 'wrócone', 'życie', 'podziękować', 'bogu)', 'tak', 'nas', 'powrócisz', 'cudem', 'na', 'ojczyzny', 'łono', 'tymczasem', 'przenoś', 'moję', 'duszę', 'utęsknioną', 'do', 'tych', 'pagórków', 'leśnych', 'do', 'tych', 'łąk', 'zielonych', 'szeroko', 'nad', 'błękitnym', 'niemnem', 'rozciągnionych;', 'do', 'tych', 'pól', 'malowanych', 'zbożem', 'rozmaitem', 'wyzłacanych', 'pszenicą', 'posrebrzanych', 'żytem;', 'gdzie', 'bursztynowy', 'świerzop', 'gryka', 'jak', 'śnieg', 'biała', 'gdzie', 'panieńskim', 'rumieńcem', 'dzięcielina', 'pała', 'a', 'wszystko', 'przepasane', 'jakby', 'wstęgą', 'miedzą', 'zieloną', 'na', 'niej', 'z', 'rzadka', 'ciche', 'grusze', 'siedzą']


21.2.4 Moduł csv

>>> wynik = []
>>> for linia in open("temperatury.data"):
...     pola = linia.strip().split("|")
...     wynik.append(pola)
...
>>> wynik
[['Stan', 'YYYY/MM/DD', 'średnia dzienna temp powietrza (F)', ' liczba odczytów dziennej temp powietrza'], ['Illinois', '1979/01/01', '17.48', '994'], ['Illinois', '1979/01/02', '4.64', '994'], ['Illinois', '1979/01/03', '11.05', '994'], ['Illinois', '1979/01/04', '9.51', '994'], ['Illinois', '1979/05/15', '68.42', '994'], ['Illinois', '1979/05/16', '70.29', '994'], ['Illinois', '1979/05/17', '75.34', '994'], ['Illinois', '1979/05/18', '79.13', '994'], ['Illinois', '1979/05/19', '74.94', '994']]


>>> import csv
>>> wynik = [pola for pola in csv.reader(open("temperatury.data", newline=""), delimiter="|")]
>>> wynik
[['Stan', 'YYYY/MM/DD', 'średnia dzienna temp powietrza (F)', ' liczba odcztów dziennej temp powietrza'], ['Illinois', '1979/01/01', '17.48', '994'], ['Illinois', '1979/01/02', '4.64', '994'], ['Illinois', '1979/01/03', '11.05', '994'], ['Illinois', '1979/01/04', '9.51', '994'], ['Illinois', '1979/05/15', '68.42', '994'], ['Illinois', '1979/05/16', '70.29', '994'], ['Illinois', '1979/05/17', '75.34', '994'], ['Illinois', '1979/05/18', '79.13', '994'], ['Illinois', '1979/05/19', '74.94', '994']]


>>> wynik2 = [pola for pola in csv.reader(open("temperatury2.data", newline=""))]
>>> wynik2
[['notatki', 'stan', 'kod stanu', 'miesiąc dzień, rok', 'kod roku, miesiąca, dnia', 'średnia dzienna temp powietrza (F)', 'liczba odczytów dziennej temp powietrza (F)', 'min. dzienna temp powietrza (F)', 'maks. dzienna temp powietrza (F)', 'średni dzienny wskaźnik ciepła (F)', 'liczba odczytów dziennego wskaźnika ciepła (F)', 'min. dzienny wskaźnik ciepła (F)', 'maks. dzienny wskaźnik ciepła (F)', 'dzienny wskaźnik ciepła (F) % pokrycia'], ['', 'Illinois', '17', 'Jan 01, 1979', '1979/01/ 01', '17.48', '994', '6.00', '30.50', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'Jan 02, 1979', '1979/01/02', '4.64', '994', '- 6.40', '15.80', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'Jan 03, 1979', '1979/01/03', '11.05', '994', '- 0.70', '24.70', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'Jan 04, 1979', '1979/01/ 04', '9.51', '994', '0.20', '27.60', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'May 15, 1979', '1979/05/15', '68.42', '994', '61.00', '75.10', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'May 16, 1979', '1979/05/16', '70.29', '994', '63.40', '73.50', 'Brak', '0', 'Brak', 'Brak', '0.00%'], ['', 'Illinois', '17', 'May 17, 1979', '1979/05/17', '75.34', '994', '64.00', '80.50', '82.60', '2', '82.40', '82.80', '0.20%'], ['', 'Illinois', '17', 'May 18, 1979', '1979/05/18', '79.13', '994', '75.50', '82.10', '81.42', '349', '80.20', '83.40', '35.11%'], ['', 'Illinois', '17', 'May 19, 1979', '1979/05/19', '74.94', '994', '66.90', '83.10', '82.87', '78', '81.60', '85.20', '7.85%']]

21.2.5 Czytanie pliku CSV jako listy słowników

>>> wynik3 = [pola for pola in csv.DictReader(open("temperatury2.data", newline=""))]
>>> wynik3[0]
OrderedDict([('notatki', ''), ('stan', 'Illinois'), ('kod stanu', '17'), ('miesiąc dzień, rok', 'Jan 01, 1979'), ('kod roku, miesiąca, dnia', '1979/01/ 01'), ('średnia dzienna temp powietrza (F)', '17.48'), ('liczba odczytów dziennej temp powietrza (F)', '994'), ('min. dzienna temp powietrza (F)', '6.00'), ('maks. dzienna temp powietrza (F)', '30.50'), ('średni dzienny wskaźnik ciepła (F)', 'Brak'), ('liczba odczytów dziennego wskaźnika ciepła (F)', '0'), ('min. dzienny wskaźnik ciepła (F)', 'Brak'), ('maks. dzienny wskaźnik ciepła (F)', 'Brak'), ('dzienny wskaźnik ciepła (F) % pokrycia', '0.00%')])


>>> wynik3[0]['stan']
'Illinois'

21.3 Pliki Excel

>>> from openpyxl import load_workbook
>>> wb = load_workbook('temp_data_01.xlsx')
>>> results = []
>>> ws = wb.worksheets[0]
>>> for row in ws.iter_rows():
... results.append([cell.value for cell in row])
...
>>> print(results)
[['Notes', 'State', 'State Code', 'Month Day, Year', 'Month Day, Year Code','Avg Daily Max Air Temperature (F)', 'Record Count for Daily Max AirTemp (F)', 'Min Temp for Daily Max Air Temp (F)', 'Max Temp for Daily Max Air Temp (F)', 'Avg Daily Max Heat Index (F)', 'Record Count for Daily Max Heat Index (F)', 'Min for Daily Max Heat Index (F)', 'Max for Daily Max Heat Index (F)', 'Daily Max Heat Index (F) % Coverage'],[None, 'Illinois', 17, 'Jan 01, 1979', '1979/01/01', 17.48, 994, 6,30.5, 'Missing', 0, 'Missing', 'Missing', '0.00%'], [None, 'Illinois',17, 'Jan 02, 1979', '1979/01/02', 4.64, 994, -6.4, 15.8, 'Missing', 0,'Missing', 'Missing', '0.00%'], [None, 'Illinois', 17, 'Jan 03, 1979','1979/01/03', 11.05, 994, -0.7, 24.7, 'Missing', 0, 'Missing','Missing', '0.00%'], [None, 'Illinois', 17, 'Jan 04, 1979', '1979/01/04', 9.51, 994, 0.2, 27.6, 'Missing', 0, 'Missing', 'Missing', '0.00%'],[None, 'Illinois', 17, 'May 15, 1979', '1979/05/15', 68.42, 994, 61,75.1, 'Missing', 0, 'Missing', 'Missing', '0.00%'], [None, 'Illinois',17, 'May 16, 1979', '1979/05/16', 70.29, 994, 63.4, 73.5, 'Missing', 0,'Missing', 'Missing', '0.00%'], [None, 'Illinois', 17, 'May 17, 1979','1979/05/17', 75.34, 994, 64, 80.5, 82.6, 2, 82.4, 82.8, '0.20%'],[None, 'Illinois', 17, 'May 18, 1979', '1979/05/18', 79.13, 994, 75.5,82.1, 81.42, 349, 80.2, 83.4, '35.11%'], [None, 'Illinois', 17, 'May 19,1979', '1979/05/19', 74.94, 994, 66.9, 83.1, 82.87, 78, 81.6, 85.2,'7.85%']]


21.5.1 CSV and other delimited files

>>> dane_temperatury = [['Stan', 'YYYY/MM/DD', 'średnia dzienna temp powietrza (F)', ' liczba odczytów dziennej temp powietrza'], ['Illinois', '1979/01/01', '17.48', '994'], ['Illinois', '1979/01/02', '4.64', '994'], ['Illinois', '1979/01/03', '11.05', '994'], ['Illinois', '1979/01/04', '9.51', '994'], ['Illinois', '1979/05/15', '68.42', '994'], ['Illinois', '1979/05/16', '70.29', '994'], ['Illinois', '1979/05/17', '75.34', '994'], ['Illinois', '1979/05/18', '79.13', '994'], ['Illinois', '1979/05/19', '74.94', '994']]
>>> csv.writer(open("temp_data_04.csv", "w", newline="")).writerows(dane_temperatury)


>>> pola = ['stan','miesiąc dzień, rok', 'średnia dzienna temp powietrza (F)', 'liczba odczytów dziennej temp powietrza (F)']
>>> dict_writer = csv.DictWriter(open("temp_data_05.csv", "w"), fieldnames=pola)
>>> dict_writer.writeheader()
>>> dict_writer.writerows(dane_temperatury)
>>> del dict_writer

21.5.2 Zapisywanie plików Excel

>>> import csv
>>> from openpuxl import Workbook
>>> wiersze_danych = [pola for pola in csv.reader(open("temperatury4.csv"))]
>>> wb = Workbook()
>>> ws = wb.active
>>> ws.title = "dane temperatury"
>>> for wiersz in wiersze_danych:
...  ws.append(wiersz)
...
>>> wb.save("temperatury7.xlsx")


