加快写入到不同文件的过程

时间:2018-01-20 00:37:57

标签: python

我正在逐行读取一个巨大的文件(232MB)。 首先,我根据正则表达式识别每一行。 然后,对于每一行,我根据每行中的cityname写入'report'目录下的不同city.txt文件。但是,这个过程需要一段时间。我想知道是否还有加快这个过程的速度?

输入文件示例:(每列用\ t分割)

2015-02-03 19:20 Sane Diebgo音乐692.08现金

实际上我已经通过写入不同的文件来测试代码而不是写入不同的文件(只是处理大文件并提出2个dicts),时差很大。 80%的时间用于写入不同的文件

def processFile(file):

    pattern = re.compile(r"(\d{4}-\d{2}-\d{2})\t(\d{2}:\d{2})\t(.+)\t(.+)\t(\d+\.\d+|\d+)\t(\w+)\n")

    f = open(file)

    total_sale = 0

    city_dict = dict()

    categories_dict = dict()

    os.makedirs("report", exist_ok = True)

    for line in f:
        valid_entry = pattern.search(line)

        if valid_entry == None:
            print("Invalid entry: '{}'".format(line.strip()))
            continue

        else:               
            entry_sale = float(valid_entry.group(5))

            total_sale += entry_sale

            city_dict.update({valid_entry.group(3) : city_dict.get(valid_entry.group(3), 0) + entry_sale})

            categories_dict.update({valid_entry.group(4) : categories_dict.get(valid_entry.group(4), 0) + entry_sale})


            filename = "report/" + valid_entry.group(3) + ".txt"
            if os.path.exists(filename):
                city_file = open(filename, "a")
                city_file.write(valid_entry.group(0))
                city_file.close()
            else:
                city_file = open(filename, "w")
                city_file.write(valid_entry.group(0))
                city_file.close()

    f.close()
    return (city_dict, categories_dict, total_sale)

1 个答案:

答案 0 :(得分:1)

使用defaultdict

可以改进字典查找和更新
from collections import defaultdict

city_dict = defaultdict(float)
categories_dict = defaultdict(float)

...

city = valid_entry.group(3)
category = valid_entry.group(4)

...

city_dict[city] += entry_sale
category_dict[category] += entry_sale