python - 从字典中替换文件行的最快方法是什么?

时间:2018-01-04 20:34:24

标签: python performance dictionary io mapping

我有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]])

但我只是运行了我的代码并且需要很长时间。

完成这项工作的最快方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用multiprocessing python软件包来简化线程(以及其他方式)以加快代码速度。

Here你可以看到一篇好文章和一些videos

答案 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所述。