一曲封尘 2022-11-19 10:50 采纳率: 33.3%
浏览 3
已结题

如何用多线程、分割或并行读取,处理,写入90G超大文件?

问题遇到的现象和发生背景

有一个90G的文件,大概有16亿行。
现在要对这个文件的每一行进行处理,但是readlines太慢了。
1.首先想到的是多线程,但是似乎写入文件的时候有些问题
2.然后又看到了分割处理,分割之后不需要合并
但是那些教程越看,脑子越乱。之前也没有接触过python的这些知识。

用代码块功能插入代码,请勿粘贴截图

这个是主要的处理函数,串行处理,很慢,预计需要8天才能处理完,这个函数里还调用了一个函数(没有放)

def write_res():
    # ncbi.update_taxonomy_database()
    fw = open(output_file,"w")
    with open(input_file,"r") as fr:
        lines = fr.readlines()[1:]
        for line in lines:
            species = line.strip().split("\t")
            pid = species[0]                                                    #文件的pid
            tid = species[1]                                                    #文件的tid
            sna = ncbi.get_taxid_translator([tid])                              #获取tid对应的物种名,字典类型
            if int(tid) in sna:                                                 #判断,可无
                sn = sna[int(tid)]                                              #提取物种名
                sn1 = sn.split()
                if len(sn1) > 1:                                                #简化物种名
                    sn = sn1[0] + "_" + sn1[1][0:2]
                else:
                    sn = sn1[0]
                rn = get_rank(tid,"phylum")                                     #调用函数获取rank
                # print(pid,tid,sn,rn)
                # print("%s@@%s-%s-%s\n"%(pid,tid,sn,rn))
                fw.write("%s@@%s-%s-%s\n"%(pid,tid,sn,rn))
            else:
                # print(pid,tid,"na","na")
                print("%s@@%s-%s-%s\n"%(pid,tid,"other","other"))
                fw.write("%s@@%s-%s-%s\n"%(pid,tid,"other","other"))
    fw.close()
运行结果及报错内容

非常慢。想要多线程、并行、分割等任意一种方法让它跑的快一点。
在服务器(最多大概可以30个线程)上跑

我的解答思路和尝试过的方法

之前用的是shell,虽然比现在的pyhton快很多,但是有的数据会找错。所以改用python。
搜了多线程的教程。越看越乱。

我想要达到的结果

想要多线程、并行、分割文件(不需要再合并到一起)等任意一种方法让它跑的快一点。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月27日
    • 创建了问题 11月19日

    悬赏问题

    • ¥20 c#使用NPOI向word表格中添加字段导致word有概率警告不可识别
    • ¥15 怎么使用hxe16进制编码器修改视频数据和图片一样!求教程!
    • ¥15 怎么用python模拟光的折射,反射,和全反射
    • ¥15 python打印机打印word和PDF文件出来的是乱码
    • ¥15 求达梦8数据库安装包
    • ¥15 YOLOv8模型网络结构更改后报错
    • ¥15 深度学习中梯度为None
    • ¥15 zynq烧写程序到flash后不运行
    • ¥15 裸板ESD问题的思考与实验
    • ¥15 electron+python