我有一个制表符分隔文件:
0923 ar blah black sheep 5555 hahahaa
234.231 world
111.11 whatever whatever 123123
whatsoever
03241
我需要把它变成字典结构
所需的输出是:
{'ar blah black sheep': ('0923', '5555'), 'whatever whatever': ('111.11', '123123')}
我一直在这样做:
text = """0923 ar blah black sheep 5555 hahahaa
234.231 world
111.11 whatever whatever 123123
whatsoever
03241"""
result = {}
for i in text.split('\n'):
columns = i.strip().split('\t')
if 1 < len(columns) and len(columns) > 2:
result[columns[1]] = (columns[0], columns[2])
print result
还有另一种方法吗?请记住,文本文件中的行数超过200万行。
答案 0 :(得分:1)
对于大文件,您可以使用for line in file
来处理加载,而不是将整个文件放入内存。
但对于像tsv这样的特定文件类型,您可以使用内置模块csv。 您只需要告诉csv模块您的数据是如何分隔的。
import csv
with open("foo.tsv", "r") as f:
reader= csv.reader(f, delimiter='\t') # tell csv to parse a tsv
for row in reader:
if len(row) >= 3: # if we got atleast 3 arguments
key, value = row[1], (row[0],row[2]) # set the 2nd as key the 1st and 3rd as value
print('Key:"'+key+'" Value:'+str(value))
答案 1 :(得分:1)
Python csv module是最好的方法。
导入csv,sys
with open("somefile.txt", 'r') as in_file:
dialect = csv.Sniffer().sniff(in_file.read(1024)) # detect tab delimiter
in_file.seek(0)
next(reader, none) # skip header
reader = csv.reader(in_file, dialect) # load file with the determined delimiter
读者将是一种字典格式。你可以使用
out_file = open("somefile2.txt", 'w')
writer = csv.writer(out_file)
for row in reader:
writer.writerow(row)
out_file.close()