Przykład 9.1: pliki
Objaśnienie
- Polecenia import powodują przyłączenie potrzebnego modułu. W tym wypadku numpy – obliczenia numeryczne oraz csv – aby odczytać dane.
- Konstrukcja with open(lista.csv) as csvfile: \; readCSV = csv.reader(csvfile, delimiter=;) powoduje utworzenie obiektu zwracającego kolejne wiersze odczytane z pliku lista.csv. Można jej używać bez zagłębiania się w szczegóły (jedyna zmiana wobec standardu skopiowanego z internetu to nazwa pliku z danymi. Jednak dla kompletności wykładu należy dodać, że:
- [ ] Tak zwany delimiter to nic innego jak znak rozdzielającego pola w pliku csv. Jeśli zechcemy zapisać dane z arkusza kalkulacyjnego do tego typu pliku – musimy zdecydować jaki to ma być znak. Jeśli wybierzemy średnik, to typowy wiersz pliku będzie wyglądał następująco: Natalia;Nowak;8
- [ ] Słowo kluczowe with pojawiło się całkiem niedawno (w Pythonie 2.6) i znaczy ono jedynie tyle, że mamy czytać z pliku jeśli ten plik istnieje i uda się go otworzyć (bardziej dogłębne wyjaśnienie: http://users.uj.edu.pl/~ufkapano/algorytmy/lekcja07/with.html).
- Instrukcja for – z którą już zetknęliśmy się (w przykładzie 1.3) wykonuje działania na wszystkich elementach. Zapis for row in readCSV: oznacza pobieranie z obiektu odczytującego dane (readCSV) kolejnych wierszy (od angielskiego row). Elementy tego wiersza są numerowane od 0. Mamy więc 0=>Imię, 1=> Nazwisko, 2=>wiek. Zapis row[2] oznacza zatem wiek.
- Zmienna ages (od angielskiego age=wiek) zawiera listę liczb. Inicjuje się ją wstawiając pustą listę oznaczoną []. Dodawaniu do listy służy własność append (ages.append(7) dodaje liczbę 7 do listy). Przygotowując ten przykład
- Autor nie wziął pod uwagę tego, że zmienna row[] zawiera kolejne elementy wiersza pliku w postaci napisów. Uzyskał więc nie listę liczb, ale listę łańcuchów znaków (liczb w postaci napisów). To spowodowało pojawienie się tajemniczego błędu zgłaszanego przez funkcję median. Aby tego błędu uniknąć trzeba było zastosować tak zwaną konwersję typów. Zapis int(9) oznacza liczbę całkowitą samo 9 to tylko napis. Nie można na przykład napisać w programie
'9'-9. Można natomiast9-int('9'). Usunięcie wspomnianego błędu zajęło mniej więcej tyle czasu, co napisanie programu. Warto zdawać sobie sprawę z tego, że tak właśnie wygląda praca programisty.