2013-04-09 3 views
1

donc c'est mon code pour la question, il y a un fichier CSV contenant 2 lignes d'info, mais quand vous venez de diviser les données, vous finirez par obtenir/n à la fin de toutes les lignes, d'où la présence d'une bande dans la fonction. Mais je ne sais pas comment utiliser la fonction correctement, espérons que certains professionnels peuvent aider à réparer cette fonction grâce. Aussi j'ai besoin de le transformer en quelque sorte en un tuple que je n'ai aucune idée quoi faire.ouvrir le fichier à partir de CSV et le retourner avec la fonction strip et split

def load_friends(filename): 
    v = [] 
    with open(filename, 'Ur') as f: 
     for line in f: 
      line = line.strip() 
      line = line.split(',') 
      line.append(tuple) 
    return v 
    f.close 
+0

Vous n'êtes pas appeler 'f.close' BTW, il est après la statemetn de retour, vous aussi devrait écrire, 'f.close()', cependant vous n'avez pas besoin de puisque 'with' appelle la méthode' close' du fichier pour vous, – jamylak

+0

Ah ok je vois merci je garderai cela à l'esprit. –

+0

Vous n'avez pas remarqué que vous remplaciez constamment votre variable "line" - et n'ajoutez rien à "v"! – volcano

Répondre

0
def load_friends(filename): 
    v = [] 
    with open(filename, 'Ur') as f: 
     for line in f: 
      line = line.strip() 
      line = line.split(',') 
      line = tuple(line) 
      v.append(line) 
    return v 

Vous devez convertir en un tuple et l'ajouter à +. line.append(tuple) n'a aucun sens, il ajoute juste un dataype à la liste line.

Alternativement,

def load_friends(filename): 
    with open(filename, 'rU') as f: 
     return [tuple(line.strip().split(',')) for line in f] 
+0

Pas besoin de la liste comp, il gaspille juste une liste intermédiaire – jamylak

+0

@jamylak: Je ne vous comprends pas .. Parlez-vous de la méthode alternative? – Manishearth

+0

Je dis juste que vous pouvez perdre le '[', ']'. Il deviendra une expression génératrice pour le constructeur de tuple qui sera beaucoup plus efficace (oui sur l'alternative) – jamylak

1

Je crois que c'est ce que vous voulez. Ceci est une simplification de votre code, mais utilisez la solution de @eumiro puisque la bibliothèque csv a été construite pour cela.

def load_friends(filename): 
    with open(filename, 'rU') as f: 
     return [tuple(line.strip().split(',')) for line in f] 
2

Ne pas réinventer la roue, utilisez le standard csv library:

import csv 

def load_friends(filename): 
    with open(filename, 'Ur') as f: 
     v = [tuple(rec) for rec in csv.reader(f, delimiter=',')] 
    return v 
+0

oups oublié 'csv' + 1 – jamylak

+0

même résultat merci, ne comprends pas vraiment comment fonctionne le délimiteur tho –

+0

@NUBatcodes -' csv.reader' besoin de 'delimiter' pour savoir, où' split' la ligne. Cependant, il fait un excellent travail avec des lignes comme «Premier champ», «second champ» 'renvoyant deux éléments seulement (' line.split' renverrait quatre). – eumiro

Questions connexes