#1 Le 07/04/2014, à 17:27
- Hizoka
[python3] Commande simplifiable ?
Bonjour,
je voulais savoir s'il était possible de simplifier mon tout petit bout de code suivant.
En admettant que j'ai un fichier test.txt :
a|1|z5
b|8|p9
x|5|u8
je veux faire une boucle récupérant ses valeurs ainsi :
for line in open("test.txt', 'r'):
infos = line.split('|')
lettre = infos[0]
num = infos[1]
comb = infos[2]
et je pense qu'il est possible de faire un truc du genre :
for lettre, num, comb in open("test.txt', 'r').split("|"):
...
mais malgré quelques testes, je n'y arrives pas... open nétant pas du str, impossible de le splitter comme ça...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 07/04/2014, à 17:38
- pingouinux
Re : [python3] Commande simplifiable ?
Bonjour,
Tu as déjà ça :
for line in open('test.txt', 'r'):
lettre, num, comb = line[:-1].split('|')
Édité : Correction
Dernière modification par pingouinux (Le 07/04/2014, à 17:43)
Hors ligne
#3 Le 07/04/2014, à 17:57
- Hizoka
Re : [python3] Commande simplifiable ?
ca simplifie un chouille en effet, mais j'aurais aimé tout mettre dans le for...
j'attends voir si quelqu'un d'autre à une proposition, mais ca m’étonnerait si tu n'as pas pu faire plus
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 07/04/2014, à 18:17
- pingouinux
Re : [python3] Commande simplifiable ?
Tu peux le faire en une seule ligne, mais ça ne simplifie pas :
for lettre, num, comb in [ line[:-1].split("|") for line in open('test.txt', 'r') ] :
print("lettre=%s num=%s comb=%s"%(lettre, num, comb))
Hors ligne
#5 Le 08/04/2014, à 06:08
- nesthib
Re : [python3] Commande simplifiable ?
Lorsque tu travailles avec des fichiers en python, il est conseillé d'utiliser la syntaxe :
with open('file', 'r') as f:
for line in f:
…
Cela permet de s'assurer que le fichier est correctement fermé à la fin de l'opération, même en cas d'erreur dans le traitement.
Ensuite, que veux-tu faire d'autre dans la boucle for ? Veux-tu simplement créer une liste des triplets ?
with open('file', 'r') as f:
l = [x.strip('\n').split('|') for x in f.xreadlines()]
Sinon, pour répondre à ta question d'origine, il est possible de faire ce que tu cherches, mais très honnêtement, c'est plutôt contre productif et sûrement moins efficace…
with open('file', 'r') as f:
for (lettre, num, comb) in map(lambda x: x.strip('\n').split('|'), f.xreadlines()):
…
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#6 Le 08/04/2014, à 10:55
- Hizoka
Re : [python3] Commande simplifiable ?
Merci à vos retours.
j'utilise toujours with open
en effet, ca complique bien plus
je vais donc rester plus simple.
Pas mal le :
l = [x.strip('\n').split('|') for x in f.xreadlines()]
mais xreadlines n'existe pas chez moi mais :
l = [x.strip('\n').split('|') for x in f.readlines()]
fonctionne tres bien.
Ma boucle contient tout plein de truc, mais je cherchais juste un système pour simplifier la récupération de variable.
Merci à vous !
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne