我有一个带制表符分隔格式的文件,带有尾随换行符,例如
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字符。后者不是一个嵌套列表,而是许多没有\ n和\ t字符的等效列表。
有人帮忙吗?
此致 S; - )
答案 0 :(得分: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]]
答案 1 :(得分:3)
首先,看看csv模块,它应该为你处理空白。您可能还想在值/条目上调用strip()
。
答案 2 :(得分: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)