我有1K文件,每行有1M行。 我有一个大约有2M键的字典,并将它们分配给1M到2M的2M唯一数字。所以条目如下:
dictionary = {
'hakuchita.mutikama' : 3,
'mitiputu.mitanata' : 4,
'pulasika.rukayota' : 1,
'luschi.rulu.pitana' : 2
}
每个文件的每一行都是这些键之一。我想用它们的值替换所有这些键。
这是我的代码:
for filename in os.listdir('data'):
with fileinput.FileInput('data/' + filename, inplace=True) as file:
for line in file:
print(dictionary[line[:-1]])
但我只是运行了我的代码并且需要很长时间。
完成这项工作的最快方法是什么?
答案 0 :(得分:1)
您可以使用multiprocessing python软件包来简化线程(以及其他方式)以加快代码速度。
答案 1 :(得分:1)
发生经济放缓是因为你正在进行逐行写作。而是将所有数据写入一个字符串(100万行仍然可以存储在内存中)并一次性写出文件。
答案 2 :(得分:1)
不是逐个获取每个键并单独调用字典,而是可以立即执行。假设您的一个文本文件包含:
hakuchita.mutikama
mitiputu.mitanata
luschi.rulu.pitana
立即获取所有密钥:
with open("sampleText.txt","r") as f:
keys = f.read().splitlines()
这是OP中的词典:
dictionary = {
'hakuchita.mutikama' : 3,
'mitiputu.mitanata' : 4,
'pulasika.rukayota' : 1,
'luschi.rulu.pitana' : 2
}
立即获取所有值:
values = [dictionary[e] for e in keys]
结果:
[3, 4, 2]
现在,正如@chepner在他的评论中所指出的那样,如果你这样做:
dictionary = dict([(k+'\n',v) for k,v in dictionary.items()])
您可以删除上述代码中的.splitlines()
,使用keys = f.readlines()
阅读文件,并节省.splitlines()
所需的时间。您可以通过并行处理优化整个过程,如@JuanAntonio所述。