Pythonban tudna segíteni valaki?
2.7-es verzió.
Be szeretnék olvasni egy fájlból adatokat, üres sorig szeretnék először olvasni, a sorokban több adat van és ezeket egy bizonyos elválasztó jel tagolja, azok mentén szeretném tuple-be rakni ezeket az adatokat.
Pl.:
sor1 , adat1 , ....
sor2 , adat2 , ....
0. Létrehozol egy üres listát
1. Megnyitod a fájlt olvasásra (open()).
2. A kapott fájlobjektumot felhasználva soronként végigmész az állományon (for ciklus)
3. A kapott sort szétbontod a kívánt karakterek mentén (split()) és belerakod a listába (append()). Esetleg ügyelj a sorvége jelekre (replace()).
Így kapsz egy kért dimenziós listát, az egyik dimenzió a sorok, a másik az oszlopok.
4. Ha oszloponként szeretnéd az adatokat egy-egy sorba rakni, arra szolgál a zip():
oszlopok = zip(*sorok)
5. Ezt utána akár át is alakíthatod tuple-ba (tuple()).
Tehát az oszlopok kerüljenek tuple-be?
Pl.:
sorok = (sor1, sor2, sorn)
adatok = (adat1, adat2, adatn)
A split() függvény feldarabolja a beolvasott sort az elválasztójel mentén és egy listába rakja:
>>> 'alma,korte,banan'.split(',')
['alma', 'korte', 'banan']
A zip() pedig tuple-ba rendezi a listák oszlopait:
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> zip(a, b)
[(1, 4), (2, 5), (3, 6)]
Ezt összerakva beolvasod és darabolod a sorokat amit egy listában tárolsz, majd meghívod rajta a zip() függvényt:
>>> sorok = [['alma', '5', 'erett'], ['korte', '2', 'romlott'], ['banan', '4', 'eladva']]
>>> zip(*sorok)
[('alma', 'korte', 'banan'), ('5', '2', '4'), ('erett', 'romlott', 'eladva')]
Ha rosszul értettem és csak a sorok kellenek tuple-ban akkor tuple(beolvasott.split(','))
Jó, tudom, kicsit túlmutat a kérdésen a javaslatom, de python alatt táblázatszerű adatstruktúrák kezelésére van egy nagyon népszerű és hatékony könyvtár: pandas (python for data anaysis). Egy vesszővel elválasztott adatfile (csv) beolvasása a következő képpen történik:
Mondjuk igy nez ki a file:
gyumolcs,darab,forint
alma,15,2
korte,45,3
szilva,21,2
import pandas as pd
file = "test.csv"
df = pd.read_csv(file, delimiter=",")
Mennyibe kerul az osszes alma:
df[df.gyumolcs == "alma"].darab * df[df.gyumolcs == "alma"].forint
Mennyibe kerul az osszes gyumolcs:
sum(df.darab * df.forint)
Lehet, hogy erre a tulegyszerusitett peldara egy kicsit eroltetett a pandas hasznalata, de egy kicsit is komplikaltabb esetben rettenetesen leegyszerusiti a kodolast. (Mar ehhez is loopokat kellett volna irni.)
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!