作者sariel0322 (sariel)
看板Python
标题[问题] 找寻超大档案内容但python会当掉
时间Wed Jul 9 22:12:34 2014
想请问一下大家
我现在要用从一个相当大的文字档中找到对应的字串并写出
但是现在遇到一个问题是会一直当掉跑不动
想请问各位有没有不会当掉又执行速度快的方法
我读取两个档案
一个A.csv是1.5mb左右,只有在第一栏有东西
一个是B.txt,约17.4GB
我要将A.csv中有对应到一样字串的B的特定那一行写出
我的code如下:
import csv
g = open("A.csv","r")
f = open("B.txt","r")
o = open("output.txt","w")
Alist = []
for row in csv.reader(g):
Alist.append(row[0])
for row in f:
if row[0:5] in Alist:
o.write(row+"\n")
g.close()
f.close()
o.close()
感谢大家的帮忙
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 120.126.36.171
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1404915156.A.E73.html
※ 编辑: sariel0322 (120.126.36.171), 07/09/2014 22:13:21
※ 编辑: sariel0322 (120.126.36.171), 07/09/2014 22:20:29
※ 编辑: sariel0322 (120.126.36.171), 07/09/2014 22:23:07
※ 编辑: sariel0322 (120.126.36.171), 07/09/2014 22:23:33
1F:推 jokester:把Alist换成Aset, in应该会变快 07/09 23:07
2F:→ jokester:相应改成 Aset=set(); Aset.add(); row[0:5] in Aset; 07/09 23:11
3F:推 walao81:如果在linux底下,用subprocess run grep 会不会更快点? 07/09 23:13
感谢jokester,我会试试看,如果不会当掉的话
to walao81,有在考虑,但对linux不熟,如果换过方法还是一样的话我会这样做的
※ 编辑: sariel0322 (182.235.15.230), 07/09/2014 23:29:49
还是会当掉,跑第一个回圈就当掉了,不论如何,先感谢
※ 编辑: sariel0322 (182.235.15.230), 07/09/2014 23:41:22
4F:→ KSJ:当掉的原因是啥? 07/09 23:47
不清楚,研判是第2个回圈导致第一个回圈有问题(我也不能理解)
曾经把第二个回圈拿掉,第一个回圈有跑完
但是把第二个回圈加上去跑第一个回圈跑到快结束时就当掉了
http://ppt.cc/fF~U
补上计数,第一个回圈的资料记得应该是19万笔
在18万多时就当在那边了
还请高手详解...
※ 编辑: sariel0322 (182.235.15.230), 07/10/2014 00:03:43
5F:→ KSJ:你开工作管理员看一下 是不是记忆体不够的问题 07/10 00:42
6F:→ KSJ:用IDLE跑看看 红字写啥 07/10 00:42
看起来记忆体是没问题、CPU也是,不过磁碟的读取跟写入几乎是满的
如果是电脑资源不够,有更好的写法比较不吃电脑资源的吗?
※ 编辑: sariel0322 (182.235.15.230), 07/10/2014 00:57:05
7F:→ KSJ:用IDLE有红字吗? 07/10 01:01
8F:→ KSJ:一直WRITE不flush 记忆体理论上会先满才是 07/10 01:01
没有耶,很不解
不过现在有时候放着会跑完了,可是看起来我要对应的资料(19万个对应17GB)
结果第二个字串对应的回圈中19万个中的第一个结束後就自己结束了...
※ 编辑: sariel0322 (182.235.15.230), 07/10/2014 01:08:28
补上,有时候会当在那,有时至少会跑完一个就结束了
※ 编辑: sariel0322 (182.235.15.230), 07/10/2014 01:09:13
9F:→ KSJ:跑出来的档案结果有写什麽进去吗? 07/10 01:19