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

Pandas处理含多行字段CSV时新增列异常的技术问询

解决Pandas处理带换行CSV字段的问题

问题根源是原始CSV不符合规范——additionalInfo字段的多行内容没有用双引号包裹,导致Pandas默认读取时把换行识别成了新记录。要解决这个问题,需要先正确读取CSV,把多行的字段合并成单个单元格,再进行后续处理。

修改后的完整脚本

import os, re, glob
import pandas as pd
import csv

# 读取原始CSV并合并被换行拆分的行
file_path = glob.glob('accounts_*.csv')[0]
rows = []
with open(file_path, 'r', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    header = next(reader)
    current_row = []
    for row in reader:
        if len(row) == len(header):
            # 遇到完整的记录行,保存之前的合并结果
            if current_row:
                rows.append(current_row)
            current_row = row.copy()
        else:
            # 行内容不完整,追加到上一行的最后一个字段(即notes)
            current_row[-1] += '\n' + ','.join(row)
    # 保存最后一条记录
    if current_row:
        rows.append(current_row)

# 转换为DataFrame并处理列
df = pd.DataFrame(rows, columns=header)
df['collections'] = re.sub('folder-', '', os.path.basename(os.getcwd()))
df['type'] = 'login'

# 重命名列
result = df.rename(columns={
    'nickname': 'name',
    'additionalInfo': 'notes',
    'url': 'login_uri',
    'username': 'login_username',
    'password': 'login_password',
    'twofaSecret': 'login_totp'
})

# 导出CSV时自动用引号包裹带特殊字符的字段
result.to_csv("test.csv", index=False, quoting=csv.QUOTE_NONNUMERIC)

关键处理步骤

  1. 手动合并拆分的行:通过csv.reader逐行读取,判断行的字段数是否与表头一致——如果不一致,说明是上一行notes字段的延续,将其追加到上一行的最后一个字段。
  2. 规范导出CSV:使用quoting=csv.QUOTE_NONNUMERIC参数,让Pandas自动为包含换行、逗号等特殊字符的字段添加双引号,符合CSV标准,Bitwarden导入时就能正确识别完整的notes内容。

这样处理后,导出的CSV不会再把notes的多行内容拆分成独立记录,也不会出现多余的前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:18