Hirdetés

Új hozzászólás Aktív témák

  • cousin333
    addikt

    Sziasztok!
    Belemerültem egy python feladatba, el is jutottam egy darabig de sajnos innen nem tudok továbbhaladni, mert nagyon kezdő vagyok még a nyelvben. Ez a program egy menetrendből szed ki sorokat feltétel szerint. A feltétel hogy a járat Londonba menjen, és késve induljon, tehát a tervezett és várható indulási időpont eltérjen(ugye az utóbbi legyen később) . Az adatok táblázatszerűen vannak rendezve egy fájlban, tabbal vannak elválasztva, és így néznek ki:

    Járatszám Hova Tervezett Várható Term. Megj.
    W62201 London Luton 06:00 05:59 1 Felszállt
    DL9694 Amsterdam 06:15 06:17 2A Felszállt
    LH1343 Frankfurt 06:35 06:42 2A Felszállt

    Összesen 50 ilyen járatom vana fájlban.

    Jelenleg a kódom itt tart:

    import sys
    import os.path

    hossz = len(sys.argv)

    if hossz < 2:
    print "Keves parameter!"
    if not os.path.isfile(sys.argv[1]):
    print "A megadott inputfajl nem letezik!"


    f1 = open(sys.argv[1], 'r')
    lines = f1.readlines()

    f2 = open('london.txt', 'w')
    for text in lines:
    text = text.rstrip(' \t')
    l = len(text)


    if (l > 0):
    f2.write(text)
    f2.close()

    Tehát csak a keret van meg, az inputfájlt majd a program futtatásakor kell megadni, és ha minden igaz ez kiszedi a tabokat és a london.txt-be írja.
    A kimenetnek úgy kéne kinéznie, hogy:

    BA865 London LHR 9

    Tehát járatszám hova megy hány percet késik
    Ui.: A várható időpont nem mindenhol szerepel, és a járatszám 5 és 7 karakter közötti.

    Előre is nagyon szépen köszönöm a segítséget!

    Üdv!

    A te példád alapján, de nem teljesen azt folytatva (szóval még dolgozni kell rajta), nekem ez jött ki. Hozzáteszem, hogy én Python 3.2.3-at használtam, ami nem teljesen kompatibilis a 2.7-es szériával (amit a kódod alapján te használtál). Szóval a kód:

    # előregyártott fejléc a sorok egyes elemeihez
    rekord = ['Kod', 'Repter', 'Terv', 'Indulas', 'Terminal', 'Megjegyzes']

    # a fájl megnyitása olvasásra, ez a "with" szerkezetes megoldás a végén be is zárja azt, a fájl objektum neve (a példád alapján) f1
    with open('d:\\text.txt', 'r') as f1:

    # adatok beolvasása soronként, sorvégi újsor karakterek ("\n") levágása
    # egy-egy sor szétbontása tabulátorokkal határolt elemekre
    # könyvtár-listát hoz létre az elemekből a "rekord" nevű fejlécekkel
    # az üres sorokat kihagyja
    # 'Terminal': '1', 'Indulas': '05:59', 'Terv': '06:00'}
    adatok = [dict(zip(rekord, i.strip('\n').split('\t'))) for i in f1 if i != '\n']

    # teljes fájl beolvasva az "adatok" nevű listába
    # példa az első elemre (adatok[0]):
    # {'Megjegyzes': 'Felszállt', 'Repter': 'London Luton', 'Kod': 'W62201', ...
    # 'Terminal': '1', 'Indulas': '05:59', 'Terv': '06:00'}

    # az időkülönbségek számításához kell ez a könyvtár
    from datetime import datetime as ido

    # végignézzük az összes bejegyzést
    for adat in adatok:
    terv = ido.strptime(adat['Terv'], '%H:%M') # a "terv" egy időobjektum lesz a szövegből a megadott formátummal
    teny = ido.strptime(adat['Indulas'], '%H:%M') # a "teny" egy időobjektum lesz a szövegből a megadott formátummal
    kulonb = teny - terv # a két időpont különbsége (egy datetime.timedelta objektum)
    adat['Diff'] = kulonb.total_seconds() / 60 # a differenciát hozzáírjuk (mp -> perc)

    #megnyitunk egy másik fájl adatmentésre
    with open('d:\\kimenet.txt', 'w') as f2:

    # kiírjuk bele azokat az elemeket (a megadott adatokkal, tabulátorral elválasztva), amiknél az időkülönbség pozitív
    [f2.write('\t'.join([elem['Kod'], elem['Repter'], str(elem['Diff'])]) + '\n') for elem in adatok if elem['Diff'] > 0]

    Vannak benne kommentek is, remélem azzal együtt érthető lesz. Ha egy sorban nincs várható időpont az a beolvasásnál nem baj, feltéve, hogy a tab-ok ki vannak neki hagyva. A számolásnál már gond lehet :), ott bele kell nyúlni a kódba valamiféle vizsgálattal.

Új hozzászólás Aktív témák