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

如何使用Python/Pandas将键值对格式非CSV文本转换为CSV文件

问题根因

你原来的代码报错核心原因是用冒号作为全分隔符读取文件,只要行内冒号数量超过1个(比如Buyer字段值里自带冒号),pandas就会判定字段数不符合预期,直接跳过该行。跳行后4个字段的对应顺序被打乱,自然出现Buyer字段数据错位、缺失的问题。

解决方案

不要直接用pd.read_csv按冒号分隔读取,改为先逐行读取文件内容,仅拆分每行的第一个冒号(字段名和值的分隔固定是第一个冒号,后续冒号都属于字段值内容),再按规则拼接成结构化数据,完全可以避免特殊字符的干扰。

完整可运行代码
import pandas as pd

# 存储所有结构化后的完整记录
all_records = []
# 临时存储单条正在处理的记录
current_record = {}

# 读取原始文本文件,路径前加r防止Windows路径转义报错
with open(r'C:\File Path\test.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 清除每行首尾的空格、换行符、多余HTML标签(如果有的话)
        line = line.strip().replace('<br />', '').replace('<br/>', '')
        # 跳过空行
        if not line:
            continue
        # 仅拆分第一个冒号,参数1表示最多拆分1次
        key, value = line.split(':', 1)
        # 清除字段名和值的首尾空格
        key = key.strip()
        value = value.strip()
        current_record[key] = value
        
        # 凑齐4个字段说明单条记录读取完成
        if len(current_record) == 4:
            all_records.append(current_record)
            # 清空临时变量准备读取下一条记录
            current_record = {}

# 直接转换为DataFrame
df = pd.DataFrame(all_records)
# 导出为CSV,设置encoding=utf-8-sig保证中文不乱码,index=False去掉多余的索引列
df.to_csv(r'C:\File Path\output.csv', index=False, encoding='utf-8-sig')
关键逻辑说明
  • split(':', 1)是解决冒号冲突的核心:比如遇到Buyer: Jake and Bob: Owner%LLC: Inc这类内容,拆分后得到的键是Buyer,值是Jake and Bob: Owner%LLC: Inc,完全保留了Buyer字段的原始内容,不会触发字段数错误。
  • 逻辑全程没有跳行、没有透视补空操作,不会出现字段错位问题,新手也能轻松调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:18:03