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.

Kod nr
 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:

Kod nr
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

  1. CSV File Reading and Writing


Licencja Creative Commons 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:

Robert Bednarz