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)