You need to enable JavaScript to run this app. 使用Python 3.x将1000+列CSV堆叠为ID与CVE两列的实现指引
优惠活动
大模型
产品
解决方案
定价
更多

使用Python 3.x将1000+列CSV堆叠为ID与CVE两列的实现指引

多列CSV转「ID-CVE」长表实现指引

先直接回应核心疑问:

  • 不存在必须使用Pandas的强制要求,两种实现路径都能完成目标转换
  • 选择Pandas方案时,确实需要先将原始CSV加载为DataFrame,Pandas本身提供原生的CSV读取接口,不需要额外的前置处理步骤
  • 完全可以仅使用Python内置的csv库完成全部转换,不需要安装任何第三方依赖,适配1000+列的大文件场景

方案1:内置csv库零依赖实现

核心逻辑

原始CSV的结构规则为:第一行每个单元格对应一个唯一ID,每一列从第二行开始的所有非空单元格,都是该ID下属的CVE值。转换时只需要逐列匹配对应ID,将每一个非空CVE值和对应ID配对成一行记录输出即可。
这种逐行读写的模式不会把整个大文件一次性加载到内存,就算文件达到GB级别也不会出现内存溢出问题。

可直接运行的代码

import csv

# 按实际修改为自己的文件路径
INPUT_CSV = "large_cve_source.csv"
OUTPUT_CSV = "target_cve_output.csv"

with open(INPUT_CSV, "r", encoding="utf-8-sig") as in_handle, \
     open(OUTPUT_CSV, "w", encoding="utf-8", newline="") as out_handle:
    csv_reader = csv.reader(in_handle)
    csv_writer = csv.writer(out_handle)
    # 写入输出文件的表头
    csv_writer.writerow(["ID", "CVE"])
    # 读取第一行,获取每一列对应的ID值
    col_id_map = next(csv_reader)
    # 逐行读取后续的CVE内容
    for content_row in csv_reader:
        # 遍历当前行的每一列,匹配对应位置的ID
        for col_idx, cve_val in enumerate(content_row):
            # 跳过空值单元格
            if cve_val.strip():
                csv_writer.writerow([col_id_map[col_idx], cve_val.strip()])

方案2:Pandas实现

核心逻辑

和你之前参考的多列堆叠方案完全匹配,第一步直接通过Pandas原生接口读取原始CSV为DataFrame,不需要提前加工,直接使用melt方法将多列的值堆叠为单值列,过滤掉空值后即可得到目标结构。

可直接运行的代码

import pandas as pd

# 直接读取原始CSV,低内存模式适配1000+列的大文件
df = pd.read_csv("large_cve_source.csv", low_memory=False)
# 列名作为ID列,每列的CVE值作为CVE列,过滤掉空值
long_result = df.melt(var_name="ID", value_name="CVE").dropna(subset=["CVE"])
# 导出为目标CSV,不保留行索引
long_result.to_csv("target_cve_output_pandas.csv", index=False, encoding="utf-8")

选型参考

  • 仅做单次格式转换、无后续数据处理需求时,优先选择内置csv库方案,零依赖、内存占用低
  • 后续需要对CVE数据做筛选、聚合、统计分析时,选择Pandas方案,能大幅减少后续重复开发量

内容的提问来源于stack exchange,提问作者piggdogg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 15:06:08