Listedesforums(/forum/)
WelcometoOpenClassrooms!Byfurthernavigating,youagreetotheuseofcookies.Moreinformation(/privacy-policy#personal-data-
gathering) OK
Accueil(/) Forum(/forum/) Programmation(/forum/categorie/programmation) LangagePython
(/forum/categorie/langage-python) Problèmedelecturedefichiers
Joalland
(/membre
s/joalland-
61232)
(/membres/joalland-
61232)
Bonjour,
Jedébuteaveclaprogrammationetpythonetj'essaiedefaireunprogrammequilitunfichiertextedata.datede
cetteforme:
avecQA,B,DleAièmequartdel'année,Bl'année,etDunchiffre(nombredeventesenmillion).
JeveuxrécupérerleschiffrescolonneDafindetracerungraphiqueavecmatplotlib.
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:
Ducoupj'aicenonequim'embêtepourlasuitecarjen'auraispasunelistecontenantlemêmetypelorsqueje
convertimalistemillion(string)enfloatavecmillion=np.array(million)etmillion.astype(float)
Ducoupmonprogrammemerendl'erreur:
Carenplusdenepasêtredubontype,mavariablemillionestpluslongued'unélémentlenone.
Siquelqu'unpourraitmedonnerdesindicespouravancer,ceseraitsympa.
-
EditéparJoallandilyaenviron14heures
Dan737
(/membre
s/dan737-
25181)
Ilexisteunmodulecsv(https://docs.python.org/3.4/library/csv.html#module-csv)danslalibstandard.
Tupourraisécrireuntruccommececipourlirelatroisièmecolonneseulement:
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/joalland-
61232)
(/membres/joalland-
61232)
Bonsoir,mercipourtaréponse.Jedébuteavecpythonetj'aimeraisfairedeschosesunpeufromscratchavant
d'utiliserdeslibs.=)J'avaisfaitquelqueserreursgrossières,voicilacorrection:
maisj'obtiensl'erreurdetypesuivante:
Jenecomprendpasparcequej'aibienconvertilalistedestringenfloat...:/
Joalland
(/membre
s/joalland-
61232)
(/membres/joalland-
61232)
Voilà,çafonctionne.J'airajoutélaconversionenfloatdanslaboucleetçafonctionne.Jenesaispastrop
pourquoicelanemarchaitpasparcontre.:/
Dan737
(/membre
s/dan737-
25181)
Plusieursproblèmesetchosesinutilesdanstoncodeplushaut(celuiquinemarchaitpas).Lafonction astype
prenduntypedenumpy.Doncc'est astype(np.float) .Maissurtoutcetteméthoderetournelanouvelleliste.
Tun'enfaisrientoi.
Regardemoncode,etnotelesdifférences(etlamoindrelongueur)
Problèmedelecturedefichiers (/forum/sujet/probleme-de-lecture-de-fichiers-1)
Sujetrésolu
1
2
3
4
5
Q3,07,0.27
Q4,07,1.12
...
Q1,15,74.47
Q2,15,61.17
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()
1
2
printmillion
(None,['0.27'])
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
1
2
3
4
5
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)
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
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()
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()
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
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()