Python - 文件内容转嵌套列表

3 投票
3 回答
7207 浏览
提问于 2025-04-15 20:12

我有一个用制表符分隔的文件,文件末尾有换行符,比如:

123   abc
456   def
789   ghi

我想写一个函数,把这个文件的内容转换成一个嵌套列表。到目前为止,我尝试过:

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

还有

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

第一个方法创建了一个嵌套列表,但里面包含了换行符(\n)和制表符(\t)。第二个方法没有生成嵌套列表,而是生成了很多没有换行符和制表符的等价列表。

有人能帮忙吗?

祝好,
S ;-)

3 个回答

3

首先,看看这个csv模块,它可以帮你处理空格问题。你也可以在值或条目上使用strip()这个方法。

8

你需要使用 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]]

输出结果:

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

在上面的代码中,我把文件的内容直接放在那儿,方便测试。如果你是从磁盘上的文件读取内容,也可以这样做(这样可能会更整洁):

import csv

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

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

还有一个不需要用到 csv 模块的选项是:

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

如果把它写成多行的语句,应该是这样的:

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)

撰写回答