Hirdetés

2024. április 27., szombat

Gyorskeresés

Hozzászólások

(#601) gt7100 válasza cousin333 (#600) üzenetére


gt7100
tag

O.K. - én azért ragadtam le a 2-es mellett, mert néhány framework/API csak 2-essel megy.
(az is igaz, hogy közel két éve nem foglalkoztam vele. :( )

(#602) mark!


mark!
őstag

Sziasztok!
Teljesen kezdő vagyok, talán a legalapvetőbb dolgokat tudom. Tényleg csak a legalapvetőbbeket ( else, if ezeket már nem értem ) Valaki nem tudná leírni az alapokat??

>

(#603) evilskati válasza mark! (#602) üzenetére


evilskati
aktív tag

Szia!

Ha van androidos telefonkészüléked, és nagyjából megy az angol, akkor ajánlom a Learn Python (SoloLearn a fejlesztő) nevű alkalmazást. Játszva tanít, és az alapokon végigmegy. Kezdésnek jó szerintem. Persze komolyabb dolgokhoz kevés.

Esetleg ezt az online könyvet: [link]

(#604) mark! válasza evilskati (#603) üzenetére


mark!
őstag

Most egy ilyen problémával állok szemben:
>>> a='The little fish'
>>> b='become a big fish'
>>> c=a+b
>>> print ("c")
c

Vagy 10x próbáltam, egyszer sem rakta össze a 2 mondatot. Mit rontok el? :O Illetve próbáltam a Fibonacci-sorozatot, ott meg nem a számokat írta, hanem egy rakat b meg a betűt.

>

(#605) Gyuri16 válasza mark! (#604) üzenetére


Gyuri16
senior tag

a vegere
print(c)

"c" -> egy c karakter
c -> valtozo

Nem vagyok egoista, csak uborkagyalu!

(#606) mark! válasza Gyuri16 (#605) üzenetére


mark!
őstag

Ohh, most megmentetted egy ártalmatlan billentyűzet életét, köszi! :DD

>

(#607) csaszizoltan válasza mark! (#602) üzenetére


csaszizoltan
csendes tag

Sulinet If Then Else

- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.

(#608) cousin333 válasza mark! (#602) üzenetére


cousin333
addikt

Egy magyar könyv: [link]

Ha meg megy az angol, akkor jó néhány könyv közül lehet válogatni. Pl. Think Python, Dive Into Python vagy mondjuk a Learning Python, ami elég alapos.

A tipikus programozási struktúrák alapvető megértéséhez ott a Wikipedia: pl. ciklusok.

"We spared no expense"

(#609) csaszizoltan válasza cousin333 (#608) üzenetére


csaszizoltan
csendes tag

A magyar könyvre én is rábukkantam, de nem normális a szerzője. Nem tudom, hogy miért kell akadémikus szóhasználattal bevezetni az olvasót az alapokba, aki nem tud programozni, annak én egyáltalán nem ajánlanám ezt a könyvet, ebből nem lehet az alapokat nyugodtan megtanulni.

- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.

(#610) sonar válasza csaszizoltan (#609) üzenetére


sonar
addikt

Sajnos annál a magyar könyvnél nem fogsz találni jobbat.
A nyelvezete is teljesen rendben van. Egyszerűen bizonyos fogalmakat nem lehet máshogy magyarázni.

A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!

(#611) cousin333 válasza csaszizoltan (#609) üzenetére


cousin333
addikt

Pedig én is azzal kezdtem, igaz, nekem már nem volt újdonság a for ciklus fogalma (bár a Python kicsit máshogy használja).

Vannak "emelkedettebb" részek, de át is lehet őket ugrani. Annyit biztos ér, mint a sulinetes Free Pascal reklám :D Nagyobb probléma, hogy öreg, mint az országút, de az alapokhoz meg így is elég.

De ha megy az angol, akkor persze több könyv is ajánlható. Viszont nem vagyok kezdő programozó (bár profi sem), így bevallom elég nehéz beleképzelnem magamat az ő helyzetükbe.

"We spared no expense"

(#612) csaszizoltan válasza cousin333 (#611) üzenetére


csaszizoltan
csendes tag

Az igaz, hogy a Udacity-n (angolul) tanultam meg a Pythont valamelyest és ott is el volt sütve pár szakkifejezés, de azért a könyvben nem kéne minden 2. mondatban elsütni egy-egy húzósabb szót, szerintem alkalmatlan ez a könyv az abszolút kezdőknek, tulajdonképpen pár oldalba néztem bele, és megijedtem, hogy ezt (a könyvet) kéne ajánlani beginnereknek, amit nem is tudnék jó szívvel megtenni, pedig a nyelv alkalmassá teszi önmagát ilyesmire például interpreter, az indentálással struktúrálás, kevés nyelvi elem stb.

- Kivel és mit iszik Orbán? - Tök mindegy! Sörös vagy boros, csak közel legyen Soroshoz.

(#613) EQMontoya válasza cousin333 (#611) üzenetére


EQMontoya
veterán

Nekem c++ és shell script után már elég könnyen ment a python a hivatalos tutorial alapján is.

[ Szerkesztve ]

Same rules apply!

(#616) cousin333 válasza EQMontoya (#613) üzenetére


cousin333
addikt

De itt most arról volt szó, hogy egy kezdőnek mit ajánlanál. C++ után, jóhogy ment... :)

"We spared no expense"

(#617) Szenty válasza sonar (#610) üzenetére


Szenty
tag

Sajnos annál a magyar könyvnél nem fogsz találni jobbat.

Szerinted. Szerintem pedig találhat, például Mark Summerfieldtől Python 3 programozást. Jól struktúrált, érthető, és főleg nem elavult a Tanuljunk meg programozni Python nyelvenhez képest.

[ Szerkesztve ]

(#618) sonar válasza Szenty (#617) üzenetére


sonar
addikt

Valszeg nem én fogok ebben a témában igazságot tenni, de arra többen is irták, hogy nem a leginkább kezdőnek való, bármennyire is részletes...

A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!

(#619) DrojDtroll


DrojDtroll
addikt

Van egy python könyvtár, amit nem sikerül telepítenem. Letöltöm a könyvtárat.

tar -zxvf -el kicsomagolom
tar -zxvf pynaoqi-python-2.7-naoqi-x.x-linux32.tar.gz

Felveszem a kicsomagolási könyvtárat a pythonpath-be.

export PYTHONPATH=${PYTHONPATH}:/path/to/python-sdk

http://doc.aldebaran.com/2-1/dev/python/install_guide.html
Ez alapján nincs más dolgom, mégis hibaüzenetet kapok.

Python 2.7.10 (default, Oct 14 2015, 16:09:02)
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import naoqi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/naoqi.py", line 7, in <module>
import qi
File "/opt/pynaoqi-python2.7-2.1.4.13-linux64/qi/__init__.py", line 72, in <module>
from _qi import Application as _Application
ImportError: libqipython.so: cannot open shared object file: No such file or directory

mi lehet a gond?

(#620) EQMontoya válasza DrojDtroll (#619) üzenetére


EQMontoya
veterán

Az, hogy a modulod hivatkozik egy másikra, ami még nincs meg neked.
Olvasd el a hibaüzit. :)

Same rules apply!

(#621) DrojDtroll válasza EQMontoya (#620) üzenetére


DrojDtroll
addikt

de megvan

épp ez a gond

de már megoldódott, az eggyel korábbi verzió tökéletesen működik

a modul a hibás

(#622) szaszayanou


szaszayanou
aktív tag

Sziasztok!

Érettségi feladatokat oldok, a konkrét esetben 2015 októberit.

A feladat lényege: van egy txt fájl, amiben érme feldobások eredményei vannak (F a fej, I az írás). Minden eredmény új sorban van.

Meg szeretném számolni, hogy hányszor dobtak kétszer fejet egymás után. A fájl kiserlet nevű objektumba való beolvasása után erre az alábbi kódot találtam ki, de nem igazán működik:

szamlalo = 0
ketfej= 0

while szamlalo < len(kiserlet):
if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
ketfej = ketfej +1
szamlalo = szamlalo + 1
else:
szamlalo = szamlalo + 1

print ketfej

Still stands Thine ancient sacrifice, An humble and a contrite heart.

(#623) EQMontoya válasza szaszayanou (#622) üzenetére


EQMontoya
veterán

Van baj, de rakd be az egész kódot, úgy okosabbak leszünk.

Same rules apply!

(#624) szaszayanou válasza EQMontoya (#623) üzenetére


szaszayanou
aktív tag

import random

asd = open("kiserlet.txt", "r")
kiserlet = asd.read()

print "On szerint fej lesz vagy iras?"

tipp=input("Irjon be 0-t ha fej, vagy egyest ha iras: ")

gepi=random.randrange(0, 2)

if int(tipp)==gepi:
print "Eltalalta"
else:
print "Sajnos tevedett"

#3-ik feladat

print "a feleadatbeli kiserlet ", len(kiserlet), "darab mintabol all."

#4-ik feladat

fejekszama = 0

for i in kiserlet:
if i == "F":
fejekszama = fejekszama + 1

fejekszama = float(fejekszama)

print "a fejek relativ gyakorisaga: ", (fejekszama/len(kiserlet))*100, "%."

szamlalo = 0
ketfej= 0

while szamlalo < len(kiserlet):
if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
ketfej = ketfej +1
szamlalo = szamlalo + 1
else:
szamlalo = szamlalo + 1

print ketfej

Still stands Thine ancient sacrifice, An humble and a contrite heart.

(#625) EQMontoya válasza szaszayanou (#624) üzenetére


EQMontoya
veterán

Ha jól sejtem, a végén kapsz egy exception-t. :)
Index <x> is out of bounds.

if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":

Itt ugyanis szamlalo+1 simán túlindexel.

További problémák a kóddal, hogy rosszul számolsz.
Mert 'IFFFI' sorozatot beszámítod kétszer, pedig ha jól értem, Neked azok az esetek kellenek, amikor pontosan két fej van egymás mögött.

Same rules apply!

(#626) cousin333 válasza szaszayanou (#624) üzenetére


cousin333
addikt

Nem találtam a feladatsort, ezért az általad írtakra hagyatkozom:

Az első feladatban nem zártad be a megnyitott fájlt. Ezt megelőzheted a with használatával, az automatikusan bezárja, és amúgy is a preferált mód. Megnyitjuk a fájlt, egy lépésben beolvassuk és a sortörések (\n) mentén szétszedjük:

with open('D:\\kiserlet.txt', 'r') as f:
kiserlet = f.read().split('\n')

A második példában feltétlenül számokat kell beírni? Használhatnád a random könyvtár choice függvényét is, ami egy lista-szerű elemből választ ki egyet találomra. Ez a lista most persze fej vagy írás:

valasztek = ('F', 'I')

tipp = input("Fej (F) vagy írás (I)? ")

if tipp == random.choice(valasztek):
print("Eltaláltad!")
else:
print("Sajnos tévedtél!")

A harmadik feladat megoldása jó. Esetleg még így lehetne:

print("A kiserlet {} mintabol allt.".format(len(kiserlet)))

Tekintve, hogy a fenti beolvasás nyomán a kiserlet egy lista, a negyedik feladat megoldásához felesleges a for ciklus, és használhatjuk a sztring formázást is a céljainkhoz.

arany = kiserlet.count("F") / len(kiserlet)
print("A fejek relatív gyakorisága {:.2%}".format(arany))

Az utolsó feladat pontos célja nem elég világos számomra, ezért most feltételezem, hogy nem lapolódhatnak át az "FF"-ek, tehát az "FFF" csak egynek számít, az "FFFF" meg kettőnek. Ebben az esetben használhatunk beépített függvényt, de ehhez a listánkból először egy sztringet gyártanunk a join használatával. Így egy lépésből megvan a kívánt szám:

dupla = "".join(kiserlet).count("FF")
print("A két egymást követő fejek száma: {}".format(dupla))

Tényleg, mit lehet használni egy ilyen vizsgán?

[ Szerkesztve ]

"We spared no expense"

(#627) Karma válasza cousin333 (#626) üzenetére


Karma
félisten

Itt a feladatsor. A családban pont érettségi làz van, ezért elő tudtam keresni, talán segít a kérdésekben.

Egyébként a nyelvi elemekből és az alap Python telepítésben lévő bármilyen modult lehet használni.

[ Szerkesztve ]

“All nothings are not equal.”

(#628) cousin333 válasza Karma (#627) üzenetére


cousin333
addikt

Köszönöm!

Így azért már más a megoldás, hiszen a feladat szerint nem lehet egyszerre beolvasni a teljes fájlt. Ebben az esetben az első 2 példa továbbra is érvényes, a harmadiktól kezdve más megközelítés szükséges. Én összevonnám a feladatokat, hogy a fájlt csak egyszer kelljen megnyitni és iterálni benne. Remélem nem maradt ki semmi, nem futtattam le a kódot:

with open("kiserlet.txt", "r") as f:

fej_db = 0 # Fejek száma
iras_db = 0 # Írások száma
dupla_db = 0 # A pontosan két egymást követő fejek száma

csakfej = 0 # A csak fejekből álló sorozat aktuális hossza
csakfej_max = 0 # A csak fejekből álló sorozat maximális hossza

# A legutóbbi három dobás tárolása
e1, e2, e3 = None, None, None

# Szépen soronként végiglépdelünk a fájlon
for line in f:
line = line.strip('\n')

if line == 'F':
fej_db += 1

# Számolás a 6. feladathoz
csakfej += 1
csakfej_max = max(csakfej_max, csakfej)

if line == 'I':
iras_db += 1

# Számolás a 6. feladathoz
csakfej_max = max(csakfej_max, csakfej)
csakfej = 0

# Számolás az 5. feladathoz
if line == 'I' and e1 == 'F' and e2 == 'F' and e3 == 'I':
dupla_db += 1

# Eltároljuk a legutóbbi dobásokat
e1, e2, e3 = line, e1, e2


# 3. feladat: Az összes dobás száma a fejek és írások összege
ossz_db = fej_db + iras_db
print('A dobások száma: {}'.format(ossz_db))

# 4. feladat
print('A fejek relatív gyakorisága: {:.2%}'.format(fej_db/ossz_db))

# 5.feladat
print('A dupla fejek száma: {}'.format(dupla_db))

# 6. feladat
print('A leghosszabb fej-sorozat: {} dobás'.format(csakfej_max))

[ Szerkesztve ]

"We spared no expense"

(#629) #82595328


#82595328
törölt tag

Egy olyan kérdésem van, hogy hogy tudok egyszerre 2 fájl-lal dolgozni. Az egyikből olvasni, a másikba írni.

Hogy érthető legyen itt egy példa feladat:
Azaz teszem azt van egy listám(forras.csv):
Név Összeg
Kis 1000
Nagy 500
Pici 200

Beolvasom soronként listába, és mondjuk hozzáadok minden összeghez 10-t.

Név Összeg
Kis 1010
Nagy 510
Pici 210

Aztán kiírom egy másik fájlba. Pl: cél.csv

Ezt így szerintem meg tudom csinálni.

A gondom az, hogy mi van akkor, ha a lista több 1.000 elemet tartalmaz? Mert akkor én úgy csinálnám, hogy:
1. Megnyitom olvasásra a forrás fájlt.
2. Megnyitom append-del a cél fájlt.
3. Elkezdem soronként beolvasni a forrásfájlt.
4. Elvégzem a műveletet.
5. Kiírom soronként a célfájlba.
5. Ha kész bezárom mindkét fájlt.

Na ezt hogy kell csinálni?
Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

(#630) EQMontoya válasza #82595328 (#629) üzenetére


EQMontoya
veterán

Mert itt két (with) open-t kellene egymásba ágyazni. Lehet ilyet?

Persze.

De lehet így is:
with open('a', 'w') as a, open('b', 'w') as b:

Whatever you want... :)

Same rules apply!

(#631) cousin333 válasza #82595328 (#629) üzenetére


cousin333
addikt

Már írták, hogyan lehet két with-et egymásba ágyazni, Ettől függetlenül én még nem ijednék meg pár ezer sorocskától, hanem egyben beolvasnám, hacsak nem kvarcórán akarod futtatni... :) Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

Fejlécet tartalmazó, több oszlopos csv fájlra meg javaslom a pandas modult. Van pl. külön egy read_csv függvénye, ami igen gyorsan képes nagy mennyiségű adatot beolvasni és jónéhány trükköt is ismer. Ezt szintén gyorsan képes feldolgozni, soronként, oszloponként vagy elemenként, majd a to_csv függvénnyel kiírathatod. Arra is van lehetőség, hogy kisebb csomagokban (chunk) olvasd és írd a fájlt. Néhány millió sornál már én is elgondolkoznék ezen a megoldáson.

Biztosra veszem, hogy lényegesen gyorsabb lesz, mint a sima open függvény meg a soronkénti iterálás. Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

[ Szerkesztve ]

"We spared no expense"

(#632) EQMontoya válasza cousin333 (#631) üzenetére


EQMontoya
veterán

Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.

Az a durva, hogy nem nagyon.
Mostanság dolgoztam egy logminer alkalmazáson, amit pythonban raktam össze, és a sima open + soronkénti iterálásnál cache-el, chunk-kal, mindenhogy próbáltam jobbat írni, de nem sikerült.
Nagyon jól meg van írva alatta az API, és szerintem behúzza memóriába kb. az egész filet.
Pedig néhány gigás textfile-okat olvasgattam, szóval elég jól mérhető lett volna a különbség.

[ Szerkesztve ]

Same rules apply!

(#633) cousin333 válasza EQMontoya (#632) üzenetére


cousin333
addikt

Melyik Python verzió volt? A 3-asban nyilván iterátort használ, minden ciklusban kér (és kap) pontosan egy új sort, ezáltal kevés memóriát fogyaszt. Akkor tölti be az egészet egyszerre, ha listát készítesz belőle. Viszont a Python for ciklus nem a sebességéről híres, de talán a fájllal könnyebb dolga van, bár az sem fix, hogy összefüggő memóriacímen helyezkedik el.

Én a fájl olvasgatásnál mondjuk a numpy genfromtxt függvényét vetettem össze a pandas from_table függvényével és meglepetésre utóbbi látványosan gyorsabb volt.

[ Szerkesztve ]

"We spared no expense"

(#634) #82595328 válasza cousin333 (#631) üzenetére


#82595328
törölt tag

Ha konkrét teendőt is írsz, akkor talán kódot is tudok adni hozzá.

Hát a konkrét teendő kb. ez :) :
Megtanulni pythonul + grafikus felület + sql szerver. A program lefordítása win-re és linuxra.

A viccet félretéve a kódot már megírtam, amit le akarok futtatni, csak be kellene ágyaznom ebbe a programba. A gondom az, hogy beolvasott sor dátumot is tartalmaz, amit a datetime modulnak át kellene adnom.
A dátum ilyen formátumú lehet: 2016-01-01 vagy 2016.01.01
A dtdate függvénynek pedig így kellene előállítanom: (2016,1,1). Na ezt nem tudom, egyelőre hogy kell. Bár gondolom splittel,

if '-' in dátum
spit1
elif '.' in dátum
spit2

Igaz egyelőre azt sem tudom, hogy kell fájlba kiírni a végeredményt, de az menni fog, csak még nem jutottam el az anyagban odáig.

(#635) justmemory válasza #82595328 (#634) üzenetére


justmemory
senior tag

Szia(sztok)!

Autodidakta pythonozó vagyok, leginkább öncélú szórakozásképpen írok magamnak programokat, tehát közel sem biztos, hogy a válaszom megfelelő; javítson ki, aki okosabb ebben!

Szerintem nem kell split; .strptime és .strftime átalakításokkal sok mindent el lehet érni attól függően, hogy mi a végcél.

Kiírni majd az open("fájlnév", "rw")-el tudod például.

[ Szerkesztve ]

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#636) EQMontoya válasza justmemory (#635) üzenetére


EQMontoya
veterán

Az egyetlen baja az strptime-nak, hogy flexibilitása szerintem egy márványtömbbel vetekszik.
Ha kicsit is változik az idő kiírásának formátuma, szórja az exceptiont, mint muter a lisztet a rétes alá.
Kivéve, ha írsz egy elég okos regexet a format részbe, de úgy meg már nem sokkal könnyebb használni, mint megcsinálni kézzel.
Az strftime viszont tényleg baba.

[ Szerkesztve ]

Same rules apply!

(#637) justmemory válasza EQMontoya (#636) üzenetére


justmemory
senior tag

Hát igen; a végcél ismeretlen, így nehezebb konkrétumot mondani; én olykor használom az strptime-ot, mert tutifix a formátum :)
Ha változik, az nyilván más helyzet; elvileg fixen kétféle lehet a kérdés szerint. Ha dinamikusabb a helyzet, akkor nyilván kezelni kell :)

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#638) EQMontoya válasza justmemory (#637) üzenetére


EQMontoya
veterán

Szerintem még kétféle formátumra is elég rusnya lesz.
Kb. megoldások:
-Felismered Te magad, hogy melyik formátum, és ifelsz.
-try strptime(format 1) expect: blabla strptime(format 2)... (azaz megpróbálod az egyikkel, ha nem sikerül, a másikkal is)
-Írsz valami regexet, hogy mi lehet a pattern. Aki nem használt még regexet, az szenvedni fog.

Same rules apply!

(#639) justmemory válasza EQMontoya (#638) üzenetére


justmemory
senior tag

Igen, én első körben az if-re gondoltam, de a try is jó, nyilván.
Az a gond, hogy nem tudni, hogy a kétféle dátumformátum honnan és milyen módon kerül beolvasásra, de gondolom egy fájl-ból, simán str-ként vagy int-ként.

Ha a formátuma változhat, akkor arra ki kell találni valamit, mert nyilván a sok try és if nem szép :) Arról nem is beszélve, hogy a formátumonbanl akár az is változhat, hogy 2016-01-01 vagy 2016-1-1... :)

Regex-et még nem írtam, nem volt rá szükségem... :) Relatíve alapszinten vagyok még, bár erre nincsen rálátásom, mert amúgy közöm nincs az informatikához végzettségileg

[ Szerkesztve ]

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#640) EQMontoya válasza justmemory (#639) üzenetére


EQMontoya
veterán

#example timestamp: Mar 30 11:49:04.880 - the last part can be milisecs or microsecs (6 digits) as well.
timestamp_regex = re.compile('[A-Z][a-z][a-z] \d+ \d+:\d+:\d+\.\d+')
time_in_line = datetime.strptime(timestamp_regex.findall(msg)[0],"%b %d %H:%M:%S.%f")

Szóval ilyenkor ez van. :)

Same rules apply!

(#641) justmemory válasza EQMontoya (#640) üzenetére


justmemory
senior tag

Jaaa, aham, nem is annyira vészes :)

Ha változik a formátum, akkor valószínűleg ez a legjobb megoldás :))

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#642) justmemory


justmemory
senior tag

Ha már belekeveredtem itt a dolgokba: arról esetleg van infója valakinek, hogy a python pandas ARM architektúrán elfut-e...? Az angol nyelvű oldalakon különböző véleményeket olvasok erről... Numpy van, viszont olyan verziót keresek, amihez nem kell a python-dateutils illetve pytz; már ha van ilyen... Eleve python 2.5-höz gondoltam feltenni.

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#643) cousin333 válasza #82595328 (#634) üzenetére


cousin333
addikt

Az első pár dologban nem tudok kellően segíteni, de legalább a programot nem is kell lefordítani... :)

A leírtak alapján továbbra is a pandas modult favorizálnám, mivel nagyon sokrétűen használható. Hogy a példádnál maradjak:

- képes beolvasni a csv és más strukturált fájlokat

- beolvasásnál meg lehet mondani, hogy melyik oszlop(ok) tartalmaznak dátumot (pl. akár akkor is, ha az év, hónap, nap és idő 4 külön oszlopban szerepel)

- a dátum értelmezéséhez megadható saját függvény, de az ésszerűség határain belül képes értelmezni őket. Például az alábbi tesztfájlt gond nélkül beolvassa:

Szam,Datum,Szoveg,Pont
11,2016-01-01,Valami,12
21,2016-03-05,Masik, 23
31,2016-1-5,Harmadik,34
41,2016-feb-8,Negyedik,48
51,2016.08.12,Otodik,56

Ehhez csak az alábbi kódot használtam:

import pandas as pd
data = pd.read_table('D:\\pandas_test.txt', sep=',', parse_dates=[1])

Az eredmény pedig egy Pandas.DataFrame objektum lesz:

>>> data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
Szam 5 non-null int64
Datum 5 non-null datetime64[ns]
Szoveg 5 non-null object
Pont 5 non-null int64
dtypes: datetime64[ns](1), int64(2), object(1)
memory usage: 240.0+ bytes

Látható, hogy a Datum oszlop típusa datetime64. A beolvasott táblázat valahogy így néz ki (A legelső oszlop az index, amit jelen esetben ő maga generált):

>>> print(data)
Szam Datum Szoveg Pont
0 11 2016-01-01 Valami 12
1 21 2016-03-05 Masik 23
2 31 2016-01-05 Harmadik 34
3 41 2016-02-08 Negyedik 48
4 51 2016-08-12 Otodik 56

A dt.date függvényednek szükséges formátumot is könnyen előállíthatod:

>>> x = data['Datum']
>>> x.dt.date.values
array([datetime.date(2016, 1, 1), datetime.date(2016, 3, 5),
datetime.date(2016, 1, 5), datetime.date(2016, 2, 8),
datetime.date(2016, 8, 12)], dtype=object)

Ezt már megetetheted a függvényeddel. De igazából nem is biztos, hogy kell, hiszen az oszlop már dátum formátumú.

[ Szerkesztve ]

"We spared no expense"

(#644) cousin333 válasza justmemory (#642) üzenetére


cousin333
addikt

pip install pandas ??? :)

Talán mehetne, legfeljebb a C-optimalizált részek helyett a Python kód futna. Tehát működne, csak lassabban. Ha viszont nincs dateutils, akkor szerintem nem települ, mert még a 0.12-es verziónak is függősége.

[ Szerkesztve ]

"We spared no expense"

(#645) justmemory válasza cousin333 (#644) üzenetére


justmemory
senior tag

:) köszi. Sajnos a pip install nem működik; azt nem tettem hozzá - és ezért kérdeztem rá az arm-ra -, hogy telefonra tenném föl, és a nokia n900 alap python-ja sajnos package error-t ír (már korábblan is próbáltam).

Végső soron nem baj a függőség, legfeljebb forrásból próbálom feltenni; a mysql-hez szükséges modult is csak így tudtam föltenni. Úgy látom itt is ezt kell próbáljam, csak meg akartam spórolni a küzdést :)

Még az előző dátumos kérdéshez: úgy láttam sql szerver is felmerült a kérdésben; mivel a python-nak van sql-hez modulja, ha sql adatbázisból kerül beolvasásra, akkor eleve lehet már a bekérésnél is picit "játszani" a dologgal... Mármint ha nem csv-ből kerül beolvasásra, hanem esetleg közvetlenül az adatbázisból.

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#646) justmemory válasza justmemory (#645) üzenetére


justmemory
senior tag

Végül a pandas 0.2-t sikerült feltennem forrásból úgy, hogy működjön is (a 0.1 valamiért scipy hibát írt ki az egyik .so fájlra...). Tudom, hogy régi, de a numpy verzióm 1.4.0, python 2.5... Az alapdolgokra és tanulni azért remélem jó lesz :)

[ Szerkesztve ]

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#647) #82595328 válasza #82595328 (#634) üzenetére


#82595328
törölt tag

Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
[[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

Ezt fájlba írtam az alábbi paranccsal:

with codecs.open('kesz.csv','w',encoding='utf-8') as f:
for i in range(len(lista)):
f.write((str(lista)+'\n'))

Ez majdnem jó is lenne, csak ezt kapom:

['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

(#648) EQMontoya válasza #82595328 (#647) üzenetére


EQMontoya
veterán

Az a problémád, hogy nem egy listád van, hanem listákat tartalmazó listád.
A kiírás pedig úgy biztosan nem jó, ahogy bemásoltad, úgy az egész listát kiírni n-szer.

Same rules apply!

(#649) axioma válasza #82595328 (#647) üzenetére


axioma
veterán

Vagy megcsinalod azt, hogy a beepitett str(lista[i]) helyett te mesz rajta vegig es osszeraksz egy stringet; vagy az str(lista[i]) stringet gyurogatod, amig jo nem lesz. Utobbi a kevesbe szep megodlas... elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

Szerk. hat igen, a szogletes zarojelben i index egy italic formazas lett neki is... ott van az eredetileg.

[ Szerkesztve ]

(#650) EQMontoya válasza axioma (#649) üzenetére


EQMontoya
veterán

elobbinel az utolso vesszo (vagy tab) eltuntetes, vagy if-ezes a nemszep.

Naa, ne taknyoljunk!

", ".join(list)

Same rules apply!

Copyright © 2000-2024 PROHARDVER Informatikai Kft.