5.5. Dane z pliku
Dane z tabel w bazach MS Accessa lub LibreOffice Base’a możemy eksportować do formatu CSV (comma-separated values), czyli pliku tekstowego, w którym każda linia reprezentuje pojedynczy rekord, a wartości pól oddzielone są jakimś separatorem, najczęściej przecinkiem lub średnikiem.
Informacja
Do kodowania i uruchamiania skryptu możesz użyć dowolnych narzędzi, np. ulubionego edytora kodu i terminala. Sugerujemy jednak wykorzystanie środowiska typu PyCharm lub innego, ponieważ ułatwiają przygotowania i pracę nad projektami w języku Python.
Załóżmy więc, że mamy plik uczniowie.csv w formacie CSV z danymi uczniów. Każda linia zawiera
dane jednego rekordu, np: Jan,Nowak,2. Poniżej podamy przykłady dwóch funkcji,
które odczytują dane i zwracają je w postaci listy, której elementami są listy zawierające poszczególne wartości pól
jednego rekordu.
Uwaga
Znaki w pliku wejściowym powinny być zakodowane w standardzie UTF-8.
5.5.1. Użycie metod ciągów znaków
Do pliku dane.py dodajemy pierwszą funkcję, która wykorzystuje metody ciągów znaków
do oczyszczenia i odczytywania danych.
1import os
2
3
4def pobierz_dane_1(plikcsv):
5 dane = [] # deklarujemy pustą listę
6 if os.path.isfile(plikcsv):
7 # otwieramy plik do odczytu
8 with open(plikcsv) as plik:
9 for linia in plik:
10 dane.append(linia.strip().split(","))
11 else:
12 print("Plik z danymi", plikcsv, "nie istnieje!")
13
14 return dane
15
Na początku funkcji za pomocą metody isfile() modułu os sprawdzamy, czy na dysku istnieje plik
podany jako argument. Jeżeli tak, w konstrukcji with otwieramy plik w trybie do odczytu,
a jego zawartość udostępniamy w zmiennej plik.
Ponieważ plik można traktować jako sekwencję linii używamy pętli for do ich odczytywania.
Każda odczytana linia za pomocą metody strip() oczyszczana jest z ewentualnych znaków spacji
na początku i końcu oraz ze znaków końca linii. Następnie metoda split() rozbija linię
na podciągi znaków, tj. wartości poszczególnych pól, wydzielając je za pomocą znaku przecinka
podanego jako argument metody. Omawiana metoda zwraca listę, którą dopisujemy do listy dane.
Wskazówka
Jeżeli znak oddzielający wartości poszczególnych pól rekordu jest inny niż przecinek,
należy podać go jako argument metody split().
5.5.2. Użycie modułu csv
Język Python dostarcza gotowy moduł do wykonywania operacji na plikach w formacie CSV. Poniżej pokazujemy funkcję, która korzysta z tego modułu do odczytywania danych:
17import csv
18
19
20def pobierz_dane_2(plikcsv):
21 dane = [] # deklarujemy pustą listę
22 if os.path.isfile(plikcsv):
23 # otwieramy plik do odczytu
24 with open(plikcsv) as plik:
25 for linia in csv.reader(plik, delimiter=','):
26 dane.append(linia)
27 return dane
28
Na początku w pliku zawierającym funkcję umieszczamy import modułu csv.
Następnie początek funkcji jest taki sam, jak w przykładzie omówionym wcześniej.
Różnica występuje w pętli for, w której do odczytania kolejnych linii z pliku
wykorzystujemy metodę reader(), która jako argumenty otrzymuje zmienną udostępniającą zawartość pliku
oraz znak rozdzielający wartości poszczególnych pól rekordu.
Wskazówka
Jeżeli znak oddzielający wartości poszczególnych pól rekordu jest inny niż przecinek,
należy podać go jako wartość argumentu delimiter.
5.5.3. Przykłady użycia
Plik dane.py zawierający jedną z omówionych wyżej funkcji nazwaną pobierz_dane()
oraz plik z danymi w formacie CSV powinny znajdować się w katalogu ze skryptem obsługującym bazę danych.
Jeżeli tak jest, to:
W skrypcie omówionym w materiale SQL można wykorzystać poniższy kod:
from dane import pobierz_dane
# ...
uczniowie = pobierz_dane('uczniowie.csv')
cur.executemany('INSERT INTO uczen (imie,nazwisko,klasa_id) VALUES(?,?,?)', uczniowie)
Wskazówka
Kod przedstawionych funkcji można zmodyfikować, aby zwracał dane w strukturze wykorzystywanej przez system ORM, np. listy słowników zawierających dane w formacie „klucz”:”wartość” (zob. System ORM Peewee, System ORM SQLAlchemy).
5.5.3.1. Materiały
Materiały Python 101
udostępniane przez
Centrum Edukacji Obywatelskiej na licencji
Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.
- Utworzony:
2026-05-30 o 19:12 w Sphinx 7.3.7
- Autorzy: