2010-03-09 8 views
3

J'ai un fichier dans l'onglet format délimité par des caractères fin de ligne, par exemple,Python - le contenu du fichier à la liste imbriquée

123 abc 
456 def 
789 ghi 

Je souhaite écrire la fonction pour convertir le contenu du fichier dans une liste imbriquée. À ce jour, je l'ai essayé:

def ls_platform_ann(): 
    keyword = [] 
    for line in open("file", "r").readlines(): 
     for value in line.split(): 
      keyword.append(value) 

et

def nested_list_input(): 
    nested_list = [] 
    for line in open("file", "r").readlines(): 
     for entry in line.strip().split(): 
      nested_list.append(entry) 
      print nested_list 

.

Le premier crée une liste imbriquée mais inclut les caractères \ n et \ t. Ce dernier ne fait pas une liste imbriquée mais plutôt beaucoup de listes équivalentes sans les caractères \ n et \ t.

Quelqu'un a-t-il besoin d'aide?

Cordialement, S ;-)

+2

vous n'avez pas besoin de '.readlines()' lors de l'itération sur un fichier texte. De plus, votre 'ls_platform_ann' ** ne crée pas ** de liste imbriquée. Ou vous ne nous montrez pas tout le code pertinent – SilentGhost

Répondre

3

Une autre option qui ne nécessite pas le module csv est:

data = [[item.strip() for item in line.rstrip('\r\n').split('\t')] for line in open('input.txt')] 

En déclaration de ligne multiple, il ressemblerait à ceci:

data = [] 
for line in open('input.txt'): 
    items = line.rstrip('\r\n').split('\t') # strip new-line characters and split on column delimiter 
    items = [item.strip() for item in items] # strip extra whitespace off data items 
    data.append(items) 
3

Tout d'abord, jetez un oeil sur le module csv, il doit gérer les espaces blancs pour vous. Vous pouvez également appeler strip() sur la valeur/entrée.

8

Vous souhaitez le module csv.

import csv 

source = "123\tabc\n456\tdef\n789\tghi" 
lines = source.split("\n") 

reader = csv.reader(lines, delimiter='\t') 

print [word for word in [row for row in reader]] 

Sortie:

[['123', 'abc'], ['456', 'def'], ['789', 'ghi']] 

Dans le code ci-dessus Ive a mis le contenu du droit de fichier là-bas pour le test facile. Si vous êtes la lecture d'un fichier à partir du disque, vous pouvez le faire aussi bien (ce qui pourrait être considéré comme plus propre):

import csv 

reader = csv.reader(open("source.csv"), delimiter='\t') 

print [word for word in [row for row in reader]]