En effet bien vu denis2
Edit : Un inconvénient tout de même, si plus d'espace entre le ':' et la chaine et le nombre, on est chocolat![]()
En effet bien vu denis2
Edit : Un inconvénient tout de même, si plus d'espace entre le ':' et la chaine et le nombre, on est chocolat![]()
effectiement fred1599
je me base sur l'exemple donnés, mais mais dans le cas soulignés:
mais peut-être y-a-t-il d'autre cas que vous voyez mieux que moi par votre experience professionel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def LoadFile(self): with open("SOCRATES_1_GeneralSettings.txt", 'r') as f: return [line[line.index(':')+1:].strip() for line in f.readlines()]
Bonjour,
Désolé pour cette intrusion mais je n'ai pas compris l'edit.
Quelque soit le nombre d'espace .split() s'en occupe
(Ici même avec une tabulation)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> line = " NoOfTurboComponents : 20 " >>> line.split() ['NoOfTurboComponents', ':', '20']
Je trouve le fait de prendre le dernier élément de la liste retournée par .split() bien plus lisible que de s'amuser avec .strip(), l'index, etc...
@+
Bonjour PauseKawa, je disais plu et pas plusse d'espaceDésolé pour cette intrusion mais je n'ai pas compris l'edit.
exemple : NoOfTurboComponents:20
Le problème de ce code c'est s'il y a 1 ou plusieurs retour à la ligne à la suite du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def LoadFile(self): with open("SOCRATES_1_GeneralSettings.txt", 'r') as f: return [line[line.index(':')+1:].strip() for line in f.readlines()]
Traceback (most recent call last):
File "face.py", line 5, in <module>
print LoadFile('text.txt')
File "face.py", line 3, in LoadFile
return [line[line.index(':')+1:].strip() for line in f.readlines()]
ValueError: substring not found
Je n'avais pas vu la négation...
De toute manière retourner une list comprehension cela fait très Python mais limite les possibilités de test.
Voici toutefois pour le code donné par denis2.
SOCRATES_1_GeneralSettings.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 return [line[line.index(':')+1:].strip() for line in f.readlines() if len(line) > 1]
Sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 NoOfTurboComponents : 2 NoOfStreamlines:3 NoOfBoundaryPoints : 4 NoOfTimeSteps : 20
Mais bon... Cela commence à faire mal aux yeux non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ['2', '3', '4', '20']
Si le format de fichier est fixe autant utiliser le dernier élément de la list (voir utiliser .pop()).
@+
Oui PauseKawa, une autre solution
me paraît plus rapide, mais j'ai pas fais de mesures temporelles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [line[line.index(':')+1:].strip() for line in f.readlines() if ':' in line]
D'ailleurs je ne sais pas laquelle de ma solution ou celle de Denis est la plus rapide (flemme), pour une longueur de fichier si faible, c'est peu significatif.
Il y a en effet plein d'autres solutions, c'est pour cela que j'adore pythonSi le format de fichier est fixe autant utiliser le dernier élément de la list (voir utiliser .pop()).
Finalement j'ai fais le test :
Ta modification PauseKawa est bien plus lente, et rend le code à une vitesse équivalent à mon code (1 seconde moins rapide) sur 1 Million de répétition.
Par contre si on modifie avec if ':' in line, on est bien plus rapide (4 secondes plus vite que mon code)
Partager