Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink


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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile

en effet, ca complique bien plus smile
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