Python csv软件包-DictReader模块的问题

问题描述 投票:0回答:1

我在Python 3.7中的csv包中有一个奇怪的问题。

我正在导入一个csv文件,并能够按预期访问所有文件,但有一个例外-头行(存储在“ fieldnames”对象中)显示的第一列标题(字段名中的第一项)格式错误。

此第一字段始终具有以下格式:'xxx"header"'

其中:

  1. xxx是看起来总是一样的垃圾字符
  2. header是正确的标题文本

从调试窗口中查看以下table <csv.DictReader>对象的屏幕截图:enter image description here

我打开文件的代码如下。我添加了headers[0] = table.fieldnames[0].split('"')[1] in order to extract the correct header and place it back into fieldnames`。

import csv

  with self.inputfile.open() as self.inputfid:
    table = csv.DictReader(self.inputfid, delimiter=',')
    headers = table.fieldnames
    headers[0] = table.fieldnames[0].split('"')[1]

很长一段时间以来我都没有注意到这一点,因为我没有使用第一列(带有#标题)-我很高兴地在多个文件上与其余列进行了一段时间的解析。

如果我直接看csv,似乎没有任何问题:

```csv


问题:

有人知道这是什么问题吗?我有什么可以尝试纠正导入问题的?

如果没有修复程序,是否有更好的方法来解析垃圾?我意识到将来可能会解决此问题,但是我认为即使仅使用双引号也可以使拆分仍然有效(标头仍应是拆分中的第二项,对吗?)。有更好的解决方案吗?

python python-3.x csv utf-8 python-unicode
1个回答
0
投票

似乎您的csv文件被编码为utf-8-sig-一些Windows应用程序使用的utf-8版本,但正在被解码为cp1252-另一种常用的编码视窗

>>> print('"#"'.encode('utf-8-sig').decode('cp1252'))
"#"

标题前面的“垃圾”字符是utf-8-sig用来告诉Windows应用程序文件是utf-8的字节顺序标记,而不是历史上更常见的8位之一编码。

为了避免“垃圾”,在打开文件时将utf-8-sig指定为编码。

© www.soinside.com 2019 - 2024. All rights reserved.