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:
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)
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” |