You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV与Parquet仅写入DataFrame最后一行问题求助

解决CSV/Parquet文件仅写入DataFrame最后一行的问题

你的代码核心问题是在循环内部每次创建新DataFrame并直接写入文件,默认写入模式为覆盖,每循环一次就会冲掉之前的内容,最终只留下最后一行数据。

修改思路

  1. 循环前初始化一个空列表,用来存储所有处理后的数据条目
  2. 循环内仅完成证书解析和数据整理,把每条数据的字典格式添加到列表中
  3. 所有循环执行完毕后,将整个列表转换为DataFrame,一次性写入CSV和Parquet文件

修改后的完整代码

import pandas as pd
from datetime import datetime
# 假设已导入x509、ExtensionOID等必要模块,且定义了qualified_qv_cert_oid

# 初始化空列表存储所有数据
data_list = []

for r in records:
    # 初始化flag,避免异常场景下变量未定义
    flag = 'Unknown'
    content = '-----BEGIN CERTIFICATE-----' + '\n' + \
              r[1] + '\n'+'-----END CERTIFICATE-----'

    try:
        cert = x509.load_pem_x509_certificate(str.encode(content))
        cert_policy_value = cert.extensions.get_extension_for_oid(
            ExtensionOID.CERTIFICATE_POLICIES).value

        # 注意:如果cert_policy_value包含多个策略,最后一个会覆盖policy_check
        # 若需处理多策略场景,需调整逻辑(比如只要存在目标OID就标记)
        for ext in cert_policy_value:
            policy_check = ext.policy_identifier.dotted_string

        # 判断证书策略类型
        if policy_check in qualified_qv_cert_oid:
            flag = 'Non-QF'
            logging.info('NON-QLFY')
        else:
            flag = 'QLFY'

    except BaseException as e:
        logging.error(f'Error found for cert: {e}')
        # 异常时flag保持初始值,也可根据需求自定义

    # 将当前行数据加入列表
    data_dict = {
        'id': r[0],
        'flag': flag,
        'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    }
    data_list.append(data_dict)

# 循环结束后统一生成DataFrame并写入文件
df = pd.DataFrame(data_list)
df.to_csv('qv_output.csv', index=False, encoding='utf-8')
df.to_parquet(path='qv_parsing.parquet', engine='auto', compression='snappy', index=False)

关键说明

  • 避免循环内写文件:一次性写入比多次循环写入效率更高,彻底解决覆盖问题
  • 初始化flag:防止证书解析异常时flag变量未定义引发报错
  • 策略遍历提示:原代码中若证书包含多个策略OID,最后一个会覆盖前面的判断结果,如有多策略处理需求,需额外调整逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:05:23