Python fájlból olvasás, adatok eltárolása (?) 2010 maj emelt info www.oktatas.hu/pub_bin/dload/kozoktatas/erettsegi/feladatok2 010tavasz/e_info_10maj_fl.pdf
www50.z#ppyshare.com/v/sZAyoYjL/file.html
A zippyshareben a lentebbi kód található egy .py fájlban átláthatóbban.
====> # helyére i-t írj: tehát zippyshare
# Szóval egy sort így olvasunk be (leellenőriztem, hogy az első sort megjeleníti-e):
"""
with open ("eladott.txt","r",encoding="utf-8") as file:
line = file.readline().strip().split(" ")
print(line)
"""
"""
De amikor az egészet akarom beolvasni, es el akarom tarolni, akkor így csinálom rosszul:
"""
adatok = []
with open ("eladott.txt","r",encoding="utf-8") as file:
line = file.readline().strip().split(" ")
while line:
line = file.readline().strip().split(" ")
mydict = {"soldjegy":line[0],"distance":line[1],"ar":line[-1]}
print(mydict) # 0-tol kene indexelodnie
adatok.append(mydict)
# Elso problemam: Nem jelenik meg az első adat vagy az utolsó
# Ha egyesével írom, hogy
sor = fajl.readline()
print(sor)
sor = fajl.readline()
print(sor) ...
# Akkor az outputban BENNE VAN az első elem
# Ha for/while akkor vagy az első vagy az utolso elem marad ki, de a for azt a kettő sort hivatott ismételni:
for sor in file:
sor = fajl.readline()
print(sor)
# olvastam stackoverflowon hogy ez így van, de miért van így?
# Második probléma: Ha logikailag tobb sor tartozik ossze(mint jelen esetben), akkor azt hogy kell megoldani? Ilyenkor is lehet dictet csinálni?
# Az elképzelésem az volt, hogy 3 változó, mindegyikhez dict, és append-olás az adatok listába. De list out of index, meg aztán rossznak is tartottam.
"""
Szerintem a legegyszerűbb, ha dictként vannak eltárolva az adatok, és akkor feladatoknál könnyebb vele dolgozni. Ennek lehetnek hátrányai? Pl indexelés, amikor tobb sor adat van logikailag egyben.
Előre is köszönöm válaszodat! (Aki akar nyugodtan szidhat, hogy hülye kezdő vagyok, megszoktam :3)
"""
# Ti hogy csinálnátok? Köszönöm szépen a válaszodat előre is!
"Ti hogy csinálnátok?"
Mi sehogy, mert nem nekünk adták a feladatot. Az érdemjegyet sem mi fogjuk kapni érte.
A 15. sorban beolvasod az első sort, aztán nem csinálsz vele semmit.
A 17. sorban beolvasod a második sort és azt már feldolgozod, ugyanígy a többit is.
Biztos ezt akarod? Az adatfájl ismerete nélkül nem tudok többet mondani.
Ahogy #4-es írta:
line = file.readline().strip().split(" ")
# -- ez a line megy a kukába?
while line:
line = file.readline().strip().split(" ")
# -- ez már a második sor, itt kezded a dict-té alakítást
#6
Az oké, de ha a loop előtt nem adom meg, hogy mi a line, akkor NameErrort kapok.
Ha while file: -t írok akkor meg tök jó lesz, csak IndexErrort kapok (az hiba, ha try expcept-tel simán tovább futtatom a programot?)
Ennyi kellene:
with open ("eladott.txt","r",encoding="utf-8") as file:
line = file.readline().strip().split(" ")
mydict = {"soldjegy":line[0],"distance":line[1],"ar":line[-1]}
print(mydict)
adatok.append(mydict)
Ha kódot akarsz mutatni, akkor kérlek tisztelettel hogy [link] -ot használj.
A while cikluson belül a "line = ..." sort rakd a ciklus végére, miután feldolgoztad az előzőleg beolvasott sort. Most beolvasod az elsőt, belépsz a ciklusba, majd rögtön beolvasod a második sort.
Viszont: nekem ez így végtelen ciklus, mert a file végén a beolvasott sor "" lesz, ha erre ráeresztem a .split(" ")-et, akkor [""] marad, azaz egy 1 elemű lista, ami a ciklus kiértékelésénél True lesz. Ez így a végtelenségig ismételgeti magát. Szóval a line változó legyen csak simán file.readline().strip(), csak később, a dictionary készítésénél darabold fel a split(" ")-tel.
Második problémára: csinálhatsz két dict-et, line1 = f.readline().strip() és line2 = f.readline().strip() , rögtön két összetartozó sort olvastál be "egyszerre". Így már bepakolhatod őket egy dictionary-be.
Miért while ciklust használsz? Elég régóta dolgozom Pythonnal, de még sosem láttam file beolvasásra.
Szerintem ez a kanonikus megoldás: [link]
"Második probléma: Ha logikailag tobb sor tartozik ossze(mint jelen esetben), akkor azt hogy kell megoldani? Ilyenkor is lehet dictet csinálni?"
Ez mit jelent egész pontosan? Ha az input file több sora tartozik egy rekordba? Ezt úgy oldanám meg, hogy a mydict-et bővíteném minden sor beolvasásakor, és egy feltétellel eldönteném, hogy véget ért-e a rekord. Ha igen, hozzáadnám a listához és kiüríteném a mydict-et. (ilyenkor persze a mydict-et a loopon kívül kell definiálni.) De itt a megoldás attól fog függeni, hogy milyen az adat.
Egy loop-on belül be lehet olvasni két sort, ahogy fent írták, de szerintem nagyon rossz ötlet, mert mi van, ha nem minden rekord 2 soros, vagy vannak 3 soros rekordok is?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!