2011-06-02 2 views
1

Je suis très novice avec Python et je sais que c'est une question assez simple. J'ai un fichier texte avec des colonnes de données. Je veux enlever les colonnes et en faire une longue liste.Analyse d'un fichier texte délimité par des tabulations pour remplacer les colonnes par une liste verticale (Python)

J'ai le code suivant:

for line in open('feddocs_2011.txt', 'r'): 
    segmentedLine = line.split("/t") 
    print segmentedLine 

Cela semble créer une chaîne pour chaque ligne, mais je pense que je peux avoir besoin de boucle à travers chacune de ces nouvelles chaînes pour diviser les suivant. Je pensais qu'il aurait tout mis en suivant un onglet sur une nouvelle ligne. J'ai essayé ce qui suit, mais j'ai reçu un message d'erreur disant que "list" n'a pas de fonction split.

while segmentedLine: 
    item = segmentedLine.split("\t") 
    print item 

Merci beaucoup pour toute contribution.

+3

Vous ne savez pas ce que vous voulez faire. Pouvez-vous donner un (petit) échantillon d'entrée et de sortie? – andrewdski

Répondre

2

Qu'en est:

x = [line.split('\t') for line in open('file.txt')] 

et vous pouvez vous joindre à la liste, si vous voulez:

sum(x, []) 

[Modifier]

si votre fichier ont seulement des onglets (sans espace) vous peut simplement faire:

x = open('file.txt').read().split() 
+0

Je ne sais pas comment le texte est formaté à coup sûr ... S'il veut aussi convertir des données en int ou pour flotter il n'a pas besoin de supprimer trailing \ n ou – JBernardo

+0

en utilisant 'sum()' est très inefficace (O (n^2)) sur les grandes listes – simon

+0

@simon parfois plus simple est mieux ... Je sais que la somme est destinée aux nombres, mais cela fonctionne bien pour les petites listes :) – JBernardo

5

Vous avez correctement divisé les lignes dans la première boucle. Ce que vous voulez faire alors est d'avoir une seconde boucle pour itérer sur chaque élément séparé par des tabulations. Ça va ressembler à ceci:

for line in open('feddocs_2011.txt', 'r'): 
    segmentedLine = line.split("\t") 
    for item in segmentedLine: 
     print item 

Ou de façon plus concise, sans la variable temporaire:

for line in open('feddocs_2011.txt', 'r'): 
    for item in line.split("\t"): 
     print item 
+0

probablement besoin de se déshabiller "'n'n'efface pas les lignes ... – simon

+0

Merci beaucoup - cela a fonctionné! Merci à tous ceux qui ont répondu si vite! –

0

si je comprends bien, ce que vous êtes AFTER est:

import itertools 
print '\n'.join(list(itertools.chain(*[line.strip().split(',') for line in open('feddocs_2011.txt', 'r')]))) 
0

mettre tout suivant un onglet sur une nouvelle ligne

Si c'est tout ce que vous voulez, pourquoi ne pas simplement utiliser la fonction str.replace?

for line in open('feddocs_2011.txt', 'r'): 
    segemented_line = line.replace('\t', '\n') 
    print(segmented_line) 

Si, pour une raison quelconque, vous voulez garder les onglets:

for line in open('feddocs_2011.txt', 'r'): 
    segemented_line = line.replace('\t', '\t\n') 
    print(segmented_line) 
1

Vous avez

foo<tab>bar<tab>baz 
bla<tab>bla<tab>bla 

et vous voulez qu'il soit

foo 
bar 
baz 
bla 
bla 
bla 

Droite?

Ensuite, vous pouvez faire tout

with open("myfile.txt", "r") as f: 
    text = f.read().replace("\t", "\n") 

Maintenant text est une seule chaîne.Si vous voulez une liste de tous les éléments à la place (["foo", "bar", "baz", "bla", "bla", "bla"]), utilisez

text = f.read().replace("\t", "\n").split("\n") 
Questions connexes