2011-06-02 53 views
1

我對Python非常陌生,我知道這是一個非常基本的問題。我有一個包含數據列的文本文件。我想刪除這些列並將它列成一個長列表。解析製表符分隔的文本文件以用一個垂直列表替換列(Python)

我有以下代碼:

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

這似乎爲每個行的獨立字符串,但我想我可能需要遍歷每個這些新的字符串分割的未來。我認爲它會把一切放在一個新標籤上。我嘗試了以下,但得到了一個錯誤消息,「列表」沒有分割功能。

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

非常感謝您的任何意見。

+3

您不清楚您想要做什麼。你可以給一些(小)樣本輸入和輸出嗎? – andrewdski 2011-06-02 03:07:26

回答

2

怎麼樣:

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

,你可以加入列表,如果你想:

sum(x, []) 

[編輯]

如果你的文件只有選項卡(無空格)你可以簡單地做:

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

我不知道文本是如何格式化的...如果他還想將數據轉換爲int或浮動,他不需要刪除尾部\ n或\ r – JBernardo 2011-06-02 03:13:06

+0

使用'sum()'是非常在大列表上效率低下(O(n^2)) – simon 2011-06-02 03:24:36

+0

@simon有時候更簡單更好...我知道sum總是用於數字,但它對於小列表來說效果很好:) – JBernardo 2011-06-02 03:39:25

5

你已經在第一個循環中正確地分割了行。你想要做的是有一個for循環遍歷每個製表符分隔的項目。這將是這樣的:

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

或者更簡潔,沒有臨時變量:

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

可能需要去掉行尾的''\ n'' ... – simon 2011-06-02 03:23:31

+0

非常感謝 - 這工作!感謝所有反應如此迅速的人! – 2011-06-02 04:13:35

0

,如果我理解正確的話,你以後就是:

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

將標籤上的所有內容全部放在新行上

如果這就是你想要的,爲什麼不使用str.replace函數?

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

如果由於某種原因,你想保留的選項卡:

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

所以,你必須

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

,你希望它是

foo 
bar 
baz 
bla 
bla 
bla 

對?

然後,你可以做

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

現在text是一個字符串。如果您想要所有項目的列表(["foo", "bar", "baz", "bla", "bla", "bla"]),請使用

text = f.read().replace("\t", "\n").split("\n") 
相關問題