En effet bien vu denis2 :ccool:
Edit : Un inconvénient tout de même, si plus d'espace entre le ':' et la chaine et le nombre, on est chocolat ;)
Version imprimable
En effet bien vu denis2 :ccool:
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:
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:
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'espaceCitation:
Dé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 fichierCode:
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()]
Citation:
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.txtCode:
1
2 return [line[line.index(':')+1:].strip() for line in f.readlines() if len(line) > 1]
SortieCode:
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:['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:
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 python :)Citation:
Si 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)