首页 > 解决方案 > 使用管道 (|) 归档 CSV,但我在字段中间使用管道

问题描述

我有一个 CSV 文件,由 ERP 生成,分隔符是竖线 (|)。但是在这个文件中,我有 ERP 中格式为 Text 的列,并且多行中的用户将管道(|)放在文本的中间,例如 |100019391 |99806354 | 电动汽车 | RES: 咨询 COBRO VVISTA - 智利 |31|24.06.2021|

这部分 EV | Res*** 是用户放置管道的字段。

我的错误是,当 pand 读取此行时,它给了我一个错误

跳过第 46 行:预计第 46 行有 28 个字段,看到 29

在此处输入图像描述

有修复它的选项吗?

Tks

标签: pythonpandaspipe

解决方案


假设管道分隔符后不存在空格,那么我们可以使用以下正则表达式r"\|(?!\s)"作为sep参数。

样本输入:

col|col1|col2|col3|col4|
100019391 |99806354 |EV | RES: Consulta COBRO VVISTA - Chile |31|24.06.2021|
100019392 |99806777 |TEST - Chile |31|25.06.2021|
100019393 |99806779 |TE | ST - Chile |31|25.06.2021|

然后,我们可以如下导入上面的csv:

df = pd.read_csv(csv_filename,
  usecols=range(5),
  sep=r"\|(?!\s)",
  lineterminator='\r',
  engine='python')

usecols根据您拥有的列数进行调整。lineterminator根据文件中使用的行终止符进行调整。这engine='python'是必需的,因为 python 会在sep.

输出图片

输出图片


推荐阅读