我正在逐行读取一个巨大的文件(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)
答案 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