如何解决:使用.csv Dictreader的Python导入文件失败时出现未定义字符

B队

首先,我发现以下内容与我的问题基本相同,但是已关闭,并且我不确定我了解关闭原因与帖子内容的关系。我也没有真正找到有效的答案。

我有来自4个应用程序的20多个输入文件。所有文件都将导出为.csv文件。前19个文件有效(从同一应用程序导出的其他4个文件),然后我遇到了一个文件,该错误提示我:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 5762: character maps to <undefined>

如果我朝右看,那是&lt ctrl&gt。下面的代码是相关的行:

with open(file, newline = '') as f: 
    reader = csv.DictReader(f, dialect = 'excel')
    for line in reader:

我知道我将要获取文件。我知道它将是.csv。由于手动生成/导出源文件,我得到的内容可能会有一些差异。在某些文件中(例如日语,俄语等),可能还会出现一些奇怪的字符。我之所以提供此信息,是因为回到源头以获取不同的文件可能只会使罐子拉开,直到我不得不提取更新的数据(或更糟糕的是,其他人这样做了)。

因此问题可能是多部分的:
1)是否有一种方法可以告诉csv.DictReader忽略未定义的字符?(有关编解码器的提示:如果看不到,对我来说毫无价值。)

2)如果我确实有“疯狂的”字符,该怎么办?我曾考虑过将每个输入作为二进制文件打开,过滤掉令人讨厌的十六进制字符,将文件写回到磁盘上,然后打开新文件,但这似乎给程序带来了很多开销,而对我来说则更多。这也是1977年以来的一些JCL声明。

3)如果我在阅读时输入崩溃,如何弄清输入的内容。

4)我选择了“方言='excel'”;因为许多输入是可以从源应用程序之一下载的Excel文件。从dictreader上的文档中,我的印象是,这仅定义了期望/使用的定界符,引号字符和EOL字符。因此,我不认为这是我的问题,但是我也是Python新手,所以我不确定100%。

B队

我在上面的评论中发布了解决的方法;这是将的errors参数设置open()'ignore'

with open(file, newline = '', errors='ignore') as f: 

这正是我在上面原始帖子中的第一个问题中正在寻找的内容(即,是否有一种方法可以让csv.DictReader忽略未定义的字符)。

更新:后来我确实需要使用一些Unicode字符,并且不能忽略它们。基于Excel产生的unicode .csv文件的该解决方案的正确答案是使用“ utf_8_sig”编解码器。这将删除Windows在文件顶部写入的字节顺序标记(utf-16 BOM),以使其知道其中包含unicode字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我使用熊猫加载CSV文件时如何解决keyerror

在空白的csv文件中使用opencsv将csv转换为bean时如何解决运行时异常

使用Pandas DataFrame将python字典导出到.csv文件时,如何解决(我认为是)编码问题?

使用ajax时如何解决未定义索引?

写入CSV时如何解决“短写入”错误

如何解决Logstash中CSV文件的解析错误

使用pd.read_csv()和绝对路径时如何解决python错误“不存在”?

如何解决:从vscode Webview扩展导入包时出现“未定义导出”和“未定义需求”错误

在python中读取csv文件时如何解决这个qouting必须是整数

使用 RecyclerView 时如何解决 NullPointerException?

使用验证时如何解决错误?

使用 JMapViewer 时如何解决 ClassNotFoundException

在 Weka 中打开 CSV 文件时,如何解决此“错误数量的值”错误?

如何解决使用ViewChild ElementRef时无法读取angular中未定义的属性'nativeElement'

使用“ --experimental-modules”进行编译时,如何解决“ ReferenceError:未定义require”错误?

与使用名称空间的外部库链接时,如何解决C中的未定义引用?

使用uclibc时如何解决对fenv.h中函数的未定义引用?

使用nuxtJS + Vue2-Editor时如何解决文档未定义错误?

在Vue中使用VeeValidate时如何解决“ TypeError:插件未定义”错误

如何解决“对象未定义”

如何解决“模块未定义”。

如何解决未定义的路由

使用 PHP 导入 CSV - 使用爆炸的未定义偏移

导入类时如何解决“未捕获的ReferenceError:XXX未定义”

如何解决使用 Python 3.6.9 导入 smtplib 时出现的错误?

使用xargs时如何解决此类文件或目录

使用apt时如何解决“文件末尾的多余垃圾”?

在python中使用熊猫时如何解决“属性错误”

从.csv文件中解析的字符串是kml文件中的无效标记。我该如何解决?