Problème de lecture de fichiers (/forum/sujet/probleme-de-lecture

publicité
WelcometoOpenClassrooms!Byfurthernavigating,youagreetotheuseofcookies.Moreinformation(/privacy-policy#personal-datagathering)
OK

Accueil(/)
Forum(/forum/)
Programmation(/forum/categorie/programmation)
(/forum/categorie/langage-python)
LangagePython
Problèmedelecturedefichiers
Recherchersurleforum
Listedesforums(/forum/) Partage
Problèmedelecturedefichiers (/forum/sujet/probleme-de-lecture-de-fichiers-1)
Sujetrésolu
Joalland
(/membre
s/joalland61232)
Bonjour,
Jedébuteaveclaprogrammationetpythonetj'essaiedefaireunprogrammequilitunfichiertextedata.datede
cetteforme:
1
2
(/membres/joalland-3
61232)
4
5
Q3,07,0.27
Q4,07,1.12
...
Q1,15,74.47
Q2,15,61.17
avecQA,B,DleAièmequartdel'année,Bl'année,etDunchiffre(nombredeventesenmillion).
JeveuxrécupérerleschiffrescolonneDafindetracerungraphiqueavecmatplotlib.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
frommathimport*
importmatplotlib.mlabasmlab
importmatplotlib.pyplotasplt
importnumpyasnp
#lecturedonnees
donnees=open("data.dat","r")
#àvoirpourchopperlavaleurdexdefaçonautomatise
x=np.arange(32)
million=[]
forligneindonnees:
txt=donnees.readline().rstrip('\n\r').split(",")
iftxt==['']:
break
else:
million.append(txt[2])
donnees.close()
#Passageversmatplotlib
million=np.array(million)
million.astype(float)
plt.bar(x,million)
plt.show()
J'aiplusieurssoucis,jen'arrivepasàcomptertoutseullenombredelignedemonfichierdata.dat...j'aiessayé
nbligne=len(donnees.readlines())maisaprèslorsquejelislefichierligneparligne,l'interpréteurresteàlafin
delaligneetdoncmabouclenefonctionnepas.j'aidoncspécifiermonnombredeligne/valeuràlamain
(x=32).
Ensuitejelislefichieravectxt=donnees.readline().rstrip('\n\r').split(",")quimerendunelistedunomtxtetc'est
son3ièmeélémentquim'intéressequejerécupèreavec:million.append(txt[2])cequiajouteàmalistemillion
lenombrequim'intéresseetceuxjusqu'àcequ'onaitparcourutoutesleslignes(break).
Saufqueendébugantavecleshellmonprogrammejetrouvequ'àlapremièreitération,monmilliondevient:
1
2
printmillion
(None,['0.27'])
Ducoupj'aicenonequim'embêtepourlasuitecarjen'auraispasunelistecontenantlemêmetypelorsqueje
convertimalistemillion(string)enfloatavecmillion=np.array(million)etmillion.astype(float)
Ducoupmonprogrammemerendl'erreur:
1
2
3
4
5
6
7
8
Traceback(mostrecentcalllast):
File"apple_date.py",line27,in<module>
plt.bar(x,million)
File"/usr/lib/python3/dist-packages/matplotlib/pyplot.py",line2515,inbar
ret=ax.bar(left,height,width=width,bottom=bottom,**kwargs)
File"/usr/lib/python3/dist-packages/matplotlib/axes.py",line5001,inbar
nbars)
AssertionError:incompatiblesizes:argument'height'mustbelength32orscalar
Carenplusdenepasêtredubontype,mavariablemillionestpluslongued'unélémentlenone.
Siquelqu'unpourraitmedonnerdesindicespouravancer,ceseraitsympa.
EditéparJoallandilyaenviron14heures
Dan737
(/membre
s/dan73725181)
Ilexisteunmodulecsv(https://docs.python.org/3.4/library/csv.html#module-csv)danslalibstandard.
Tupourraisécrireuntruccommececipourlirelatroisièmecolonneseulement:
1
2
3
(/membres/dan737- 4
5
25181)
6
7
8
9
10
importcsv
data=[]
withopen('data.dat','r')ascsvfile:
reader=csv.reader(csvfile,delimiter=',')
forrowinreader:
data.append(float(row[2]))
print(data)
PS:Etcommeaufinaltuveuxutilisernumpy,ilexistegenfromtxt
(http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html)quilituncsvdirectementdansun
numpyarray.
EditéparDan737ilyaenviron13heures
Pygametutorielenvidéo(https://www.youtube.com/watch?v=5PvvvVtZNLg&list=PL6it4a6idp54LSy…
Joalland
(/membre
s/joalland61232)
Bonsoir,mercipourtaréponse.Jedébuteavecpythonetj'aimeraisfairedeschosesunpeufromscratchavant
d'utiliserdeslibs.=)J'avaisfaitquelqueserreursgrossières,voicilacorrection:
1
2
3
4
(/membres/joalland- 5
6
61232)
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
frommathimport*
importmatplotlib.mlabasmlab
importmatplotlib.pyplotasplt
importnumpyasnp
#lecturedonnees
donnees=open("data.dat","r")
nbligne=0
million=[0]
forligneindonnees:
txt=ligne.rstrip('\n\r').split(",")
ifnbligne==0:
million[0]=txt[2];nbligne=nbligne+1
iftxt==['']:
break
else:
million.append(txt[2]);nbligne=nbligne+1
donnees.close()
#Passageversmatplotlib/numpy
million=np.array(million)
million.astype(float)
#graphique
x=np.arange(nbligne)
plt.bar(x,million)
plt.show()
maisj'obtiensl'erreurdetypesuivante:
1
2
3
4
5
6
7
8
Traceback(mostrecentcalllast):
File"apple_date.py",line30,in<module>
plt.bar(x,million)
File"/usr/lib/python3/dist-packages/matplotlib/pyplot.py",line2515,inbar
ret=ax.bar(left,height,width=width,bottom=bottom,**kwargs)
File"/usr/lib/python3/dist-packages/matplotlib/axes.py",line5039,inbar
ifh<0:
TypeError:unorderabletypes:numpy.str_()<int()
Jenecomprendpasparcequej'aibienconvertilalistedestringenfloat...:/
Joalland
(/membre
s/joalland61232)
1
2
3
4
5
6
(/membres/joalland- 7
8
61232)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
frommathimport*
importmatplotlib.mlabasmlab
importmatplotlib.pyplotasplt
importnumpyasnp
#lecturedonnees
donnees=open("data.dat","r")
nbligne=0
million=[0]
forligneindonnees:
txt=ligne.strip("\n\r").split(',')
ifnbligne==0:
million[0]=float(txt[2]);nbligne=nbligne+1
iftxt==['']:
break
else:
million.append(float(txt[2]));nbligne=nbligne+1
donnees.close()
#graphique
x=np.arange(nbligne)
plt.bar(x,million)
plt.show()
Voilà,çafonctionne.J'airajoutélaconversionenfloatdanslaboucleetçafonctionne.Jenesaispastrop
pourquoicelanemarchaitpasparcontre.:/
Dan737
(/membre
s/dan73725181)
Plusieursproblèmesetchosesinutilesdanstoncodeplushaut(celuiquinemarchaitpas).Lafonction astype
prenduntypedenumpy.Doncc'est astype(np.float) .Maissurtoutcetteméthoderetournelanouvelleliste.
Tun'enfaisrientoi.
Regardemoncode,etnotelesdifférences(etlamoindrelongueur)

(/membres/dan7371
25181)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/envpython
#-*-encoding:utf-8-*
importmatplotlib.pyplotasplt
importnumpyasnp
#lecturedonnees
withopen("data.dat","r")asf:
donnees=f.readlines()
million=[]
forligneindonnees:
txt=ligne.split(",")
million.append(txt[2])
#Passageversmatplotlib/numpy
million=np.array(million)
million=million.astype(np.float)
#graphique
x=np.arange(len(million))
plt.bar(x,million,align='center')
plt.show()
Plusieurschosesànoter:
Onlitunfichieravecuncontextmanager(le with statement).
Onlitleslignesaveclafonction readlines quis'occupedéjàd'enleverlesretoursàlaligne.
Oninitialiseunelistevide.Jenecomprendspascequetuessayaisdefaireavant.Peut-êtrelapremière
lignecontientlenomdetescolonnes?
Ontrouvelenombredeligneenregardantaprèslalongeurdenotrelistecréée.
Pygametutorielenvidéo(https://www.youtube.com/watch?v=5PvvvVtZNLg&list=PL6it4a6idp54LSy…
Problèmedelecturedefichiers
×
Youwillhavetologinafterclickingon"Answer"topublishyourmessage.
Editeur
Répondre
OpenClassrooms
Professionals
Whoweare(/qui-sommes-nous)
Business(/business)
Howdoesitwork(/how-does-it-work)Universitiesandschools(/universities)
Jobs(/jobs)
Getinvolved
Contactus
Createacourse(/new-teachers)
Helpustranslate(https://www.transifex.com/organization/openclassrooms)
Affiliation(https://www.affili.net/fr/programmes/arts-culture/formation-et-enseignement/openclassrooms)
Termsandconditions(/terms-conditions/en)
Followus
Ourblog(http://blog.openclassrooms.com/)






(https://www.facebook.com/openclassrooms)
(https://twitter.com/openclassrooms)
(https://plus.google.com/+OpenClassrooms/posts)
(http://instagram.com/openclassrooms)
(https://www.youtube.com/user/TheOpenClassrooms)
(https://www.linkedin.com/company/openclassrooms)
Téléchargement