Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » Pythonban ha beolvasok fájlból...

Rionen kérdése:

Pythonban ha beolvasok fájlból adatot. Az alábbi példát?

Figyelt kérdés

A fájlban egymás alatt sortöréssel elválasztva az alábbiak vannak:

T

X

T

C

S

V


Hogyan tudom úgy beolvasni, hogy az elemek

így legyenek: TXT, CSV.



2016. máj. 9. 11:06
1 2
 1/12 anonim válasza:

Tehát hármasával szeretnéd beolvasni őket.


A legegyszerűbb megoldás hogy beolvasol 3 sort, összefűzöd őket és eltárolod, és ezt addig csinálod amíg vannak még sorok:


* * * * * *

exts = []


while True:

. a = file.readline()

. b = file.readline()

. c = file.readline()


. if a and b and c:

. . exts.append(a.strip() + b.strip() + c.strip())

. else:

. . break

* * * * * *


Aztán ezt rövidítheted is listanézettel, ennek előnye hogy rövid és kompakt lesz a kód, hátránya hogy előre be kell olvasni az össze sort a memóriába, illetve ha nem vagy jártas a Pythonban nehezebb átlátni:


* * * * * *

all = [line.strip() for line in file]

exts = [a+b+c for a,b,c in zip(all[0::3], all[1::3], all[2::3])]

* * * * * *


Ha viszont nem biztos hármasával szeretnéd beolvasni, lehet hogy később úgy döntesz hogy neked a sorokat 18-asával kell beolvasni akkor nem biztos hogy jó ötlet kézzel összecsatolni a változókat hanem egy ciklusra kell rábízni a dolgot, ez nagyban bonyolítja a kódot és ajánlom hogy ezt gyakorlásképen próbáld megcsinálni önállóan, mert segít az algoritmikus gondolkodási mód kialakításában:


* * * * * *

exts = []

eof = False


while not eof:

. ext = ''

. for i in range(3):

. . letter = file.readline()

. . if letter:

. . . ext += letter.strip()

. . else:

. . . eof = True

. . . break

. else:

. . exts.append(ext)

* * * * * *


A fájlok megnyitásához ajánlom a with kulcsszót open-close helyett ami automatikusan be is zárja a fájlokat a szkóp végén:


* * * * * *

with open('filename.txt', 'rt') as file:

. . # ide írod a kódot

. . # ...

# nem kell lezárni itt már le van zárva

* * * * * *

2016. máj. 9. 13:47
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:
Valami egyszerűbb megoldás fapados könnyebben érthető nincs?:D
2016. máj. 9. 15:39
 3/12 anonim válasza:
Melyik része nem érthető? A legelső példa talán a legfapadosabb amit írni lehet, ha azt nem érted akkor még sokat kell tanulnod. Ha valami nem világos, elmagyarázom, csak kérdezz.
2016. máj. 9. 15:45
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
En beolvasnam egyetlen string-be az osszes betut, majd utana darabolnam amerkkorara kell.
2016. máj. 9. 17:07
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:
Igazából az állomány amiből be kéne olvasnom az adatokat marha hosszú így nem tudok végiglépegetni rajta. Én valami ciklikusban gondolkozom azaz hármasával új elemet tesz a listához, hogy valami ilyen legyen az eredmény: [['TXT'],['CSV']. A feladat szerint így hármasával kéne a beolvasott adatokat kezelni.
2016. máj. 9. 18:20
 6/12 anonim válasza:

"Igazából az állomány amiből be kéne olvasnom az adatokat marha hosszú így nem tudok végiglépegetni rajta."


Ennek nincs sok értelme tekintve hogy 1 mondattal később ciklussal akarsz végiglépkedni rajta és tárolni akarod az összes benne található információt egy listában.


Az már csak hab a tortán hogy pont azt írtad le amit korábban már megcsináltam. Miért nem ülsz neki és próbálod meg értelmezni?


* * * * * *

exts = []


while True:

. a = file.readline()

. b = file.readline()

. c = file.readline()


. if a and b and c:

. . exts.append(a.strip() + b.strip() + c.strip())

. else:

. . break

* * * * * *


Ez beolvas 3 sort, összefűzi őket és hozzáadja a elemet az exts listához egy ciklusban. Ha a fájl végére értünk kilép a ciklusból.


readline() beolvas egy sort

strip() levágja a whitespaceket, pl a sor végi '\n' karaktert azaz a soremelést

append() hozzátesz egy elemet egy listához

break kilép a ciklusból


Amit ismerned kell a megvalósításhoz:

- ciklus (while, break)

- feltételes elágazás (if, else)

- fájlból olvasás (open, readline)

- szövegkezelés (+, strip)

- listák ([], append)


Ennél egyszerűbb megoldás nagyon nincsen és ezek mind-mind nagyon alap dolgok. Nem tudom pontosan mi nem érthető de akkor ismételd át a fentebb leírt dolgokat vagy gyakorolj először könnyebb feladatokkal.

2016. máj. 9. 18:43
Hasznos számodra ez a válasz?
 7/12 A kérdező kommentje:

Csak, hogy jó értem amit írtál :

Addig amíg igaz:

a=egy sor beolvasása

b=egy következő sor beolvasása

if a and b c: (ez annyit tesz, ha már a ,b ,c megvan?)

ext.append(a+b+c(levágva az '\n'-ek).


Az else kitétel miért kell a végére?

Kösz a türrelmet.

2016. máj. 9. 18:53
 8/12 anonim válasza:

A readline() ha a fájl végére ért akkor üres stringet ad vissza. Ellenőrizni kell hogy nem ért e a fájl végére, azaz az a, b és c változók nem üresek, tartalmaznak valamit.


Az "if a and b and c" azt jelenti hogy ha az a, b és c változókban van valami azaz nem üresek akkor történjen valami. Ha ezek közül bármelyik is üres akkor nem teljesül a feltétel (azaz elértük a fájl végét) és az else ágba lép be. Az else ágban a break parancs kilépteti a programot a ciklusból.


Az "if a and b and c" ugyan azt jelenti ez esetben mint az "if a != '' and b != '' and c != ''" azaz kiolvasva "ha a és b és c nem üres stringek, akkor" vágjuk le róluk a soremelést, füzük őket össze és rakjuk be a listába, egyébként (else) ha bármelyik is üres, azaz elértük a fájl végét, lépjünk ki a ciklusból.

2016. máj. 9. 19:17
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:
Ezt érthetően megmagyaráztad a számomra. Köszönöm.
2016. máj. 9. 19:39
 10/12 anonim ***** válasza:

Erre teljesen felesleges ciklusokat irogatni. Az egesz cucc 4(!!!) sor (es akkor mar a szavak hossza is parameterezve van):


# Szo hossza:

stepSize = 3


# Beolvassuk a file-t:

with open('input.txt', 'r') as f:

....string=f.read().replace('\n', '')


# Felosztjuk a beolvasott string-et egy listaba:

array = [string[i:i+stepSize] for i in range(0,len(string), stepSize)]


Ki kell hasznalni, hogy a python mennyire magas szintu programozasi nyelv, mennyire hatekonyan lehet valtozokat letrehozni es manipulalni. A python nagyon nagyon jo nyelv, de elveszik a lenyeg, ha 20 sorban csinal meg valamit az ember, ha kozben 3 ban is meg lehet.

2016. máj. 9. 21:30
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!