Wesh les mecs,
For ne marche pas dans else. Quelle pourrait etre la cause ?
Version imprimable
Wesh les mecs,
For ne marche pas dans else. Quelle pourrait etre la cause ?
Salut,
Lorsque tu as lu le fichier avec readlines() tu es arrivé à la fin du fichier. Donc il n'y a plus rien à lire.
Code:
1
2
3
4
5
6
7 >>> inf = open("Ava", "r") >>> r = inf.readlines() >>> for i in inf: ... print(i) ... >>>
Je sais pas comment adapter vos propositions. Je débute. ça fait au moins 6 heures que je bloque là dessus. J'arrive pas du tout à afficher for.
Pièce jointe 583147
Si tu expliquais ce que tu veux faire, ce serait peut-être plus simple.
On vous a déjà expliqué que .readlines() ayant lu tout le fichier, votre boucle "for" n'aura plus rien à lire.
Si vous débutez, vous devriez avoir le nez dans un tuto. où les exercices sont corrigés. Cela vous permettrait d'avoir acquis le minimum de bases qui vous permettraient de comprendre les suggestions qu'on peut vous faire.
Ce n'est pas pour rien qu'avoir passé du temps dans un tuto. est un pré-requis avant de demander de l'aide!
- W
Bonjour,
Voici un mini-tuto sous forme de code avec des commentaires pour comprendre comment ça marche :
Remarque : normalement, à la place d'un code de la forme :Code:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 # Dans le code ci-dessous, tous les print sont appelés. # Autrement dit, on entre bien dans tous les if. print("Writing to test.txt...") file_object_1 = open("test.txt", "w") try: file_object_1.write("line 1\n") file_object_1.write("line 2\n") file_object_1.write("line 3") finally: file_object_1.close() print("Done.\n") print("Reading test.txt...") file_object_2 = open("test.txt") try: if next(file_object_2) == "line 1\n": print("1st line: as expected.") if next(file_object_2) == "line 2\n": print("2nd line: as expected.") if next(file_object_2) == "line 3": print("3rd line: as expected.") finally: file_object_2.close() print("Done.\n") # Le code ci-dessus illustre que l'objet retourné par open # ne représente pas seulement un fichier mais aussi la position # dans le fichier. # Quand on appelle next, on avance d'une ligne. L'objet change d'état. print("Reading test.txt, again...") file_object_3 = open("test.txt") try: if next(file_object_3) == "line 1\n": print("1st line: as expected.") if file_object_3.readlines() == ["line 2\n", "line 3"]: print("2nd and 3rd lines: as expected.") if file_object_3.readlines() == []: print("There is nothing left to read.") finally: file_object_3.close() print("Done.\n") # Le code ci-dessus montre que readlines() ne lit pas tout le fichier : # il lit le fichier *à partir de la position où on se trouve* et # avance jusqu'à la fin. # Après l'appel à readlines(), on est à la fin du fichier. # Appeler de nouveau readlines() ne fait pas revenir au début. print("Reading test.txt, again and again...") file_object_4 = open("test.txt") try: if next(file_object_4) == "line 1\n": print("1st line: as expected.") expected_lines = [] for line in file_object_4: expected_lines.append(line) if expected_lines == ["line 2\n", "line 3"]: print("2nd and 3rd lines: as expected.") other_lines = [] for line in file_object_4: other_lines.append(line) if other_lines == []: print("There is nothing left to read.") finally: file_object_4.close() print("Done.\n") # Le code ci-dessus montre que, quand on fait une boucle for # sur un objet retourné par open, c'est pareil qu'avec readlines() : # on lit le fichier *à partir de la position où on se trouve* et # on avance jusqu'à la fin.
on écrit plus simplement :Code:
1
2
3
4
5 file_object = open(file_path) try: do_something(file_object) finally: file_object.close()
mais je ne sais pas si tu as déjà vu with.Code:
1
2 with open(file_path) as file_object: do_something(file_object)
Si c'est pour lire :
Code:
1
2
3
4
5 file="..." with open(file, "r") as f: for line in f: print(line)
Dans un tuto. vous apprenez à afficher les éléments d'une liste:
Ce qui change est que L est la liste retournée par .readlines()... et que pour afficher on pourrait se contenter d'un print(L).Code:
1
2
3 L = [1, 2, 3, 4] for e in L: print (e)
Mais apprendre, c'est passer du temps, et non vous contenter de regarder les solutions des exercices pour recopier du code que vous ne comprenez pas.
- W
Quand on débute, on ne recopie pas un code qu'on ne peut pas comprendre, avec du try, du raise et qui va même jusqu'à créer ses propres exceptions 8O
On commence par apprendre ce qu'est un fichier, à l'ouvrir, et à le lire. Et ça, c'est dans tous les tutos.
Effectivement il n'y a pas de tuto sur "comment détecter si un fichier contient moins de 10 lignes et les afficher à l'écran". Les tutos t'apprennent ce qu'est une boucle, comment on la crée, ce qu'est une liste, comment on la traite, ce qu'est un fichier, comment on l'ouvre. Et c'est en comprenant chaque notion que tu pourras ensuite les combiner pour résoudre tes algos.
Voilà. Monsieur est servi. Affaire expédiée.Code:
1
2
3 fp=open(r"C:\Users\Youcef\Documents\test.txt", "r") for line in fp: print(line) fp.close()
ouf les mecs j'ai réglé le problème. ça tenait sur une ligne. savoir qu'il fallait réouvrir le fichier après readlines a grandement contribué à la trouvaille.
par contre jtiens à préciser que readline et if ne sont pas compatibles. c'est readlines avec un s qu'il faut utiliser. parce que readline donne des résultats chelou. si jmets if xxx < 4 et qu'il y a 3 lignes Python comptera plus que 3 lignes. pour l'instant jai pas très bien compris pourquoi. jverrai ça après. quant à read jcrois que c'est pire il lit le tout comme un bloc de texte et ne tient pas compte des lignes. enfin jpense.
une fois que j'ai réouvert le fichier j'imprime avec for ou print(xxx.readlines()), peu importe, les deux marchent. for n'était pas l'origine du problème. mais bon jpense que vous savez tout ça déjà.
par contre ça a soulevé un nouveau problème. tout ce tralala fonctionne avec un fichier txt. et rien d'autre.
en essayant avec docx et rtf, ça donne rien.
docx ça renvoie une erreur :j'ai essayé encoding tf8, ça marche pas.Citation:
'charmap' codec can't decode byte 0x81 in position 637: character maps to <undefined>
et rtf {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1036\deflangfe1036\themelang1036\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} + encore 50 autres lignes d'erreur
ça va me poser un poser plus tard parce que j'ai pas du tout l'intention d'utiliser des fichiers txt pour importer
Pièce jointe 583167
N'importe quoi! Vous ne comprenez vraiement pas ce qu'on vous raconte.
Si les deux existent, c'est qu'on ne les utilise pas pour la même chose...
Ah ben oui, un fichier texte c'est juste des lignes qui se terminent par fin de ligne et les autres types de fichiers sont plus riches côté structure et on ne peut pas se contenter d'un simple "open".
Il faudra installer une bibliothèque externe qui connait ce format là et faire avec.
- W
C est bon. J arrive justement sur le chapitre qui traitre des fichiers. Ça devrait plus etre un souci
C'était une des possibilités... mais peut-être la pire de toutes !!!
Ouais c'est vrai. On n'arrive jamais à les utiliser ensembles et c'est effectivement un lourd handicap quand on dévelope en Python...
Oui, ça aussi. Tous les dev Python s'interrogent d'ailleurs sur le pourquoi du comment. Il y a même un ticket ouvert à ce sujet sur la communauté dev mais qui reste non résolu depuis plusieurs années. Certains pensent que le souci vient de Python lui-même qui n'est pas capable de lire une ligne.
Hé oui. Parce que tous les fichiers ne sont pas tous faits de lignes dans le sens où nous (les humains) définissons ce concept. Donc tu as des outils dédiés aux lignes, et des outils dédiés aux datas.
Oh là là ce clafoutis que t'as dans la tête !!! :calim2:
Donc en fait, t'as travaillé plusieurs heures à essayer péniblement de lire un fichier texte pour, au final, venir nous dire que c'est pas ça et que ton but est de lire du docx ??? Tu sais que tu es en bonne voie pour devenir notre gagnant de l'année toi ???
C'est exactement comme si tu avais essayé d'apprendre à utiliser gimp (logiciel de traitement d'images) pour essayer de faire du montage vidéo
Oui, peu importe effectivement :roll:
Mouais. A la limite tu aurais lu le chapitre avant d'essayer de lire un fichier ça aurait été plus adéquat mais bon, l'important c'est que tu l'aies lu...
Surnaturel, ce fil !
Juste au cas où, j'ai quelques années de python derrière moi en mode débutant débrouillé, et je n'ai rien compris à ton programme.
Tu as essayé celui que je t'ai proposé ?
Bon courage, il n'y a rien de pire que croire qu'on a compris lorsque ce n'est pas le cas.