Menetrend feladat
Estimated reading: 4 minutes
0 views
Ez a Python fájl beolvassa egy „menetrend.txt” nevű szöveges fájlt, és az adatokat betölti egy „hajo.db” nevű SQLite3 adatbázisba. Ezután lekérdezi az adatbázist a „J1” azonosítóval rendelkező járatra vonatkozó információkért.
A fájl részei:
1. Osztály definíció:
import sqlite3 as sqlite
class menetrend:
def __init__(self, sor):
jarat, honnan, hova, indul, erkezik= sor.split('\t')
self.jarat=jarat
self.honnan=honnan
self.hova=hova
self.indul=indul
self.erkezik=erkezik
- Az
import sqlite3
sor betölti az SQLite3 modult. - A
menetrend
osztály definiál egy__init__
metódust, amely feldolgoz egy bemenetisor
-t, és az oszlopokat (jarat
,honnan
,hova
,indul
,erkezik
) attribútumokként tárolja.
2. Adatok beolvasása:
lista=[]
with open('menetrend.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
lista.append(menetrend(sor))
#a fájl sorai a így néznek ki
#elsősor:
#jarat honnan hova indul erkezik
#többi sor példa:
#B5 Balatonboglár Révfülöp 14:30 14:55
#E3 Balatonfüred Tihany 13:00 13:20
#F3 Fonyód Badacsony 10:00 10:30
#J1 Csopak Balatonfüred 11:20 11:45
#J1 Balatonfüred Tihany 11:45 12:05
- A
lista
változó tárolja amenetrend
objektumokat. - A
with
blokk beolvassa amenetrend.txt
fájlt, és feldolgozza az egyes sorokat. - A
splitlines()
metódus feldarabolja a fájl tartalmát sorokra. - A
menetrend(sor)
konstruktor meghívódik a soronkénti feldolgozáshoz.
3. Adatbázis műveletek:
con = sqlite.connect('hajo.db')
cur = con.cursor();
cur.execute('DROP TABLE IF EXISTS menetrend')
con.commit()
cur.execute('''CREATE TABLE
menetrend(azon INTEGER PRIMARY KEY AUTOINCREMENT,
jarat TEXT, honnan TEXT, hova TEXT, indul TEXT, erkezik TEXT )''')
con.commit()
sql = 'INSERT INTO menetrend(jarat, honnan, hova, indul, erkezik) VALUES(?,?,?,?,?)'
for e in lista:
adat = (e.jarat, e.honnan, e.hova, e.indul, e.erkezik)
cur.execute(sql,adat)
con.commit()
- A
con
változó tárolja az adatbázishoz való kapcsolódást. - A
cur
változó a lekérdezések futtatására szolgál. - A
DROP TABLE IF EXISTS
parancs törli a „menetrend” táblát, ha létezik. - A
CREATE TABLE
parancs létrehozza a „menetrend” táblát a megadott oszlopokkal. - Az
sql
változó tárolja az INSERT parancsot. - A
for
ciklus bejárja alista
elemeit, és beszúrja azokat az adatbázisba.
4. Lekérdezés:
cur.execute('SELECT * FROM menetrend WHERE jarat="J1"')
for s in cur.fetchall():
print(s)
- A
SELECT * FROM menetrend WHERE jarat="J1"
parancs lekérdezi azokat a sorokat a „menetrend” táblából, ahol ajarat
oszlop értéke „J1”. - A
fetchall()
metódus lekéri az összes találatot. - A
for
ciklus bejárja a találatokat és kiírja őket.
A teljes kód:
import sqlite3 as sqlite
class menetrend:
def __init__(self, sor):
jarat, honnan, hova, indul, erkezik= sor.split('\t')
self.jarat=jarat
self.honnan=honnan
self.hova=hova
self.indul=indul
self.erkezik=erkezik
lista=[]
with open('menetrend.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
lista.append(menetrend(sor))
con = sqlite.connect('hajo.db')
cur = con.cursor();
cur.execute('DROP TABLE IF EXISTS menetrend')
con.commit()
cur.execute('''CREATE TABLE
menetrend(azon INTEGER PRIMARY KEY AUTOINCREMENT,
jarat TEXT, honnan TEXT, hova TEXT, indul TEXT, erkezik TEXT )''')
con.commit()
sql = 'INSERT INTO menetrend(jarat, honnan, hova, indul, erkezik) VALUES(?,?,?,?,?)'
for e in lista:
adat = (e.jarat, e.honnan, e.hova, e.indul, e.erkezik)
cur.execute(sql,adat)
con.commit()
cur.execute('SELECT * FROM menetrend WHERE jarat="J1"')
for s in cur.fetchall():
print(s)
Összefoglalva:
Ez a Python fájl bemutatja, hogyan lehet beolvasni egy szöveges fájlt, betölteni az adatokat egy SQLite3 adatbázisba, és lekérdezni az adatbázist.