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)
关键处理步骤
- 手动合并拆分的行:通过
csv.reader逐行读取,判断行的字段数是否与表头一致——如果不一致,说明是上一行notes字段的延续,将其追加到上一行的最后一个字段。 - 规范导出CSV:使用
quoting=csv.QUOTE_NONNUMERIC参数,让Pandas自动为包含换行、逗号等特殊字符的字段添加双引号,符合CSV标准,Bitwarden导入时就能正确识别完整的notes内容。
这样处理后,导出的CSV不会再把notes的多行内容拆分成独立记录,也不会出现多余的前缀。
内容的提问来源于stack exchange,提问作者user3611658
相关产品推荐
相关产品推荐

