解析制表符分隔的文本文件并用单列替换列(Python)

1 投票
5 回答
4065 浏览
提问于 2025-04-16 18:49

我刚开始学Python,知道这个问题很基础。我有一个文本文件,里面有几列数据。我想把这些列去掉,变成一长串的列表。

我写了以下代码:

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

这段代码似乎为每一行创建了一个单独的字符串,但我觉得我可能需要遍历这些新字符串,然后再进行分割。我原以为它会把每个制表符后面的内容放到新的一行上。我尝试了以下方法,但出现了一个错误提示,说“列表”没有分割功能。

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

非常感谢大家的帮助。

5 个回答

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")
2

那这个怎么样:

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

如果你想的话,可以把这些列表合并起来:

sum(x, [])

[编辑]

如果你的文件里只有制表符(没有空格),你可以简单地这样做:

x = open('file.txt').read().split()
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

撰写回答