5.4. Dane z pliku

Dane z tabel w bazach MS Accessa lub LibreOffice Base’a możemy eksportować do formatu csv, czyli pliku tekstowego, w którym każda linia reprezentuje pojedynczy rekord, a wartości pól oddzielone są jakimś separatorem, najczęściej przecinkiem.

Załóżmy więc, że mamy plik uczniowie.csv zawierający dane uczniów w formacie: Jan,Nowak,2. Poniżej podajemy przykład funkcji, która odczyta dane i zwróci je w użytecznej postaci:

Kod nr
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import os


def pobierz_dane(plikcsv):
    """
    Funkcja zwraca tuplę tupli zawierających dane pobrane z pliku csv
    do zapisania w tabeli.
    """
    dane = []  # deklarujemy pustą listę
    if os.path.isfile(plikcsv):  # sprawdzamy czy plik istnieje na dysku
        with open(plikcsv, "r") as zawartosc:  # otwieramy plik do odczytu
            for linia in zawartosc:
                linia = linia.replace("\n", "")  # usuwamy znaki końca linii
                linia = linia.replace("\r", "")  # usuwamy znaki końca linii
                linia = linia.decode("utf-8")  # odczytujemy znaki jako utf-8
                # dodajemy elementy do tupli a tuplę do listy
                dane.append(tuple(linia.split(",")))
    else:
        print "Plik z danymi", plikcsv, "nie istnieje!"

    return tuple(dane)  # przekształcamy listę na tuplę i zwracamy ją

Na początku funkcji pobierz_dane() sprawdzamy, czy istnieje plik podany jako argumet. Wykorzystujemy metodę isfile() z modułu os, który należy wcześniej zaimportować. Następnie w konstrukcji with otwieramy plik i wczytujemy jego treść do zmiennej zawartosc. Pętla for pobiera kolejne linie, które oczyszczamy ze znaków końca linii (.replace('\n',''), .replace('\r','')) i dekodujemy jako zapisane w standardzie utf-8. Poszczególne wartości oddzielone przecinkiem wyodrębniamy (.split(',')) do tupli, którą dodajemy do zdefiniowanej wcześniej listy (dane.append()).

Na koniec funkcja zwraca listę przekształconą na tuplę (a więc zagnieżdzone tuple), która po przypisaniu do jakiejś zmiennej może zostać użyta np. jako argument metody .executemany() (zob. przykład poniżej).

Powyższy kod można zmodyfikować, aby zwracał dane w strukturę wymaganą przez ORM Peewee, tj. listę słowników zawierających dane w formacie “klucz”:”wartość” (zob. Systemy ORM -> Operacje CRUD).

Uwaga

Znaki w pliku wejściowym powinny być zakodowane w standardzie utf-8.

5.4.1. Przykład użycia

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)

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:2022-05-22 o 19:52 w Sphinx 1.5.3
Autorzy:Patrz plik “Autorzy”