在Python中循环使用大文件需要数小时
这是我在
Python工作的第二天.我在C上工作了一段时间,但决定尝试Python.我的程序按预期工作.但是,当我在没有glob循环的情况下一次处理一个文件时,每个文件大约需要半个小时.当我包含glob时,循环大约需要12个小时来处理8个文件.
我的问题是,我的程序中有什么东西肯定会减慢它的速度吗?有什么我应该做的让它更快? 我有一个大文件夹.例如 file1.txt(6gb) 如果它有帮助,每行数据都以一个字符开头,该字符告诉我其余字符是如何格式化的,这就是我拥有所有if elif语句的原因.一行数据如下所示: 我试图读取每个文件,使用拆分进行一些解析,然后保存文件. 计算机有32GB的ram,所以我的方法是将每个文件读入ram,然后遍历文件,然后保存,清除RAM用于下一个文件. 我已经包含了该文件,因此您可以看到我正在使用的方法.我使用if elif语句,它使用大约10个不同的elif命令.我曾经尝试过一本字典,但我无法理解为了挽救我的生命. 任何答案都会有所帮助. import csv import glob for filename in glob.glob("/media/3tb/5may/*.txt"): f = open(filename,'r') c = csv.writer(open(filename + '.csv','wb')) second=0 mill=0 for line in f.readlines(): #print line event=0 ticker=0 marketCategory=0 variable = line[0:1] if variable is 'T': second = line[1:6] mill=0 else: second = second if variable is 'R': ticker = line[1:7] marketCategory = line[7:8] elif variable is ... elif variable is ... elif ... elif ... elif ... elif ... elif if variable (!= 'T') and (!= 'M') c.writerow([second,mill,event ....]) f.close() UPDATE elif variable is 'C': order = line[1:10] Shares = line[10:16] match = line[16:25] printable = line[25:26] price = line[26:36] elif variable is 'P': ticker = line[17:23] order = line[1:10] buy = line[10:11] shares = line[11:17] price = line[23:33] match = line[33:42] UPDATE2 我在glob.glob(“/ media / 3tb / * file.txt”)中使用for filename再次运行它,并且文件夹中的一个文件花了一个小时. glob代码是否增加了那么多时间? 解决方法
这里:
for line in f.readlines(): 你应该这样做: for line in f: 前者将整个文件读入行列表,然后遍历该列表.后者以增量方式执行,这应该大大减少分配的总内存,然后由程序释放. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |