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

如何处理无扩展名文件中引号内的|以转换为Python DataFrame

解决方法

不需要手动修改文件,用Python结合正则表达式批量处理引号内的|,再读取为DataFrame即可,步骤如下:

1. 处理文件内容

使用正则匹配所有被双引号包裹的字段,移除其中的|:

import re
import pandas as pd
from io import StringIO

# 读取原始文件内容
with open("your_file", "r", encoding="utf-8") as f:
    raw_content = f.read()

# 替换双引号内的|为空
processed_content = re.sub(
    r'"([^"]+)"',
    lambda match: match.group(0).replace("|", ""),
    raw_content
)

2. 读取为DataFrame

处理后的内容可以直接通过StringIO在内存中读取,避免生成中间文件:

# 读取为DataFrame,指定分隔符为|,跳过字段前的空格
df = pd.read_csv(
    StringIO(processed_content),
    sep="|",
    skipinitialspace=True,
    na_filter=False  # 避免把空列解析为NaN,可根据需求调整
)

print(df.head())

效果说明

你的示例行处理后会变成:

Details|145|Sam's Garden|Retail|12.0|"It's a nice garden"| USD|||||||||||||||||||||||||||
Details|200|That's my thing|Retail|23.4|"Not so great"|EUR|||||||||||||||||||||||||||

此时用sep="|"读取时,引号内的内容会被识别为单个字段,不会出现列数不匹配的问题。

正则说明

r'"([^"]+)"' 用于匹配所有成对双引号包裹的内容:

  • " 匹配起始双引号
  • [^"]+ 匹配任意非双引号的字符(确保只匹配到闭合的引号)
  • " 匹配结束双引号
    lambda函数会对每个匹配到的字段,仅替换其中的|,保留其他内容和双引号本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:07