社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在python中逐行复制文件的更有效方法?

Martin • 3 年前 • 1032 次点击  

我有一个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,每次我打开文件时,我都不知道如何获得更好的性能。 也许有人有一些建议?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129388
 
1032 次点击  
文章 [ 1 ]  |  最新文章 3 年前