我有一个10GB的文件,上面有这样的图案:
Header,
header2,
header3,4
content
aaa, HO222222222222, AD, CE
bbb, HO222222222222, AS, AE
ccc, HO222222222222, AD, CE
ddd, HO222222222222, BD, CE
eee, HO222222222222, AD, CE
fff, HO222222222222, BD, CE
ggg, HO222222222222, AD, AE
hhh, HO222222222222, AD, CE
aaa, HO333333333333, AG, CE
bbb, HO333333333333, AT, AE
ccc, HO333333333333, AD, CT
ddd, HO333333333333, BD, CE
eee, HO333333333333, AD, CE
fff, HO333333333333, BD, CE
ggg, HO333333333333, AU, AE
hhh, HO333333333333, AD, CE
....
假设在第二列中我有一个ID。在整个文件中,我有4000人,每个人都有50k条记录。
我不能用我准备好的脚本来分析那个大文件(熊猫中的10GB脚本,我的内存太低。我知道我应该重构它,我正在处理它),所以我需要将该文件分成4个部分。但我不能在文件之间分割ID。我的意思是我不能把一个人的一部分放在单独的文件里。
所以我写剧本。它根据ID将文件分为4个部分。
下面是代码:
file1 = open('file.txt', 'r')
count = 0
list_of_ids= set()
while True:
if len(list_of_ids) < 1050:
a = "out1.csv"
elif (len(list_of_ids)) >= 1049 and (len(list_of_ids)) < 2100:
a = "out2.csv"
elif (len(list_of_ids)) >= 2099 and (len(list_of_ids)) < 3200:
a = "out3.csv"
else:
a = "out4.csv"
line = file1.readline()
if not line:
break
try:
list_of_ids.add(line.split(',')[1])
out = open(a, "a")
out.write(line)
except IndexError as e:
print(e)
count += 1
out.close()
但是速度太慢了,我需要加快速度。
有很多if,每次我打开文件时,我都不知道如何获得更好的性能。
也许有人有一些建议?