枫枫枫枫子 2023-01-14 17:07 采纳率: 75%
浏览 73
已结题

python处理超大(12.3GB)CSV文件,获取指定关键词所在行的数据输出为新CSV文件

筛选一个12.3GB的EXCEL文件中的关键词所在行的数据,太大了打不开。关键词由一个小文件决定,小文件(20.6MB)显示如下:

img

img

前七行无用,第八行是表头,从第九行开始往后就是数据,其第一列的cg00000292、cg00002426...就是关键词。
已知大文件数据的第一列也是cg+编号,大文件和小文件该列数据是有重合cg编号的。根据小文件中存在的cg序号所在行,提取大文件中的有对应cg序号所在行的数据,输出新的文件。
我是通过csv显示的大文件:

import csv
with open('大文件.csv', 'r') as f:
    reader = csv.reader(f)
    print(type(reader))
    for row in reader:
        print(row)

显示结果为:

img

但我看不到像小文件截图中显示的,类似小文件的前七行和后几行这样的信息。可以确定cg所在行的数据的开头也是是cg+编号,所以可以因此筛选。

举个例子说明一下问题:假设大文件是这样的话:

img

而只有cg00000292也出现在小文件的第一列cg编号中,所以筛选大文件输出的新文件为:

img

我一开始的思路:①用一段代码先:获得大文件中每个cg编号的所在行数②去和小文件对应,获得重复cg编号有哪些,根据其在大文件中对应的行数,输出大文件这些行获得新excel文件实现筛选。

但是文件实在太大了,处理不周到昂。

  • 写回答

3条回答 默认 最新

  • cjh4312 2023-01-14 17:40
    关注

    你可以先测试一下,用pandas,如果数据太大,你还可以先切一部分数据出来看看

    import pandas as pd
    dd=pd.read_csv('大文件.csv')
    #数据切片
    df=dd[0:100]
    print(df)
    data=dd[dd.iloc[:,0]=='cg00000292']
    #如果知道第一列表头
    data=dd[dd['列名']=='cg00000292']
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 修改了问题 1月14日
  • 创建了问题 1月14日

悬赏问题

  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计