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

2024-05-01

首先,我发现下列 https://stackoverflow.com/questions/38019379/python-unicodedecodeerror-utf8-codec-cant-decode-byte-0x91这与我的问题基本相同,但它已关闭,我不确定我是否理解关闭的原因与帖子的内容。我也没有真正看到有效的答案。

我有来自 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)我选择了“dialect='excel'”;因为许多输入都是 Excel 文件,可以从源应用程序之一下载。从 dictreader 上的文档来看,我的印象是这只是定义了期望/使用的分隔符、引号字符和 EOL 字符。因此,我不认为这是我的问题,但我也是一个Python菜鸟,所以我不能100%确定。


我在上面的评论中发布了我所采用的解决方案;这是为了设置errors的论证open() to 'ignore':

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

这正是我在上面的原始帖子中的第一个问题中所寻找的(即是否有办法告诉csv.DictReader忽略未定义的字符)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决:使用 .csv Dictreader 导入文件的 Python 因未定义字符而失败 的相关文章

  • 根据日期列过滤并创建列

    我有一个样本数据如下 date Deadline 2018 08 01 2018 08 11 2018 09 18 2018 12 08 2018 12 18 我想用代码中描述的条件填写截止日期列 如 1 DL 2 DL 3 DL 等 基于
  • Python 中的密码子生成

    我有这段代码 用于将 DNA 字符串转换为密码子列表 然后将此列表转换为具有各自氨基酸的字符串 然而 当我运行代码并且 DNA 字符串以一对核苷酸 例如 CT 而不是三联体结尾时 代码不会生成氨基酸序列 正如您在输出中看到的 from co
  • 为不带引号的函数获取字符串参数

    我有一个函数 用于从 URL 下载文件并将其写入磁盘 并施加特定的文件扩展名 目前 它看起来像这样 import requests import os def getpml url filename psc requests get url
  • 表单输入框不显示

    我正在尝试使用 Django 显示一个简单的表单输入文本框 我正在亚马逊 AWS 上部署 该网站在不同的服务器 pythonanywhere 上运行良好 但在 AWS 上存在主要问题 具体来说 输入框没有被显示 我使用的模板如下 首页 ht
  • 回归模型 statsmodel python

    这更多是一个统计问题 因为代码运行良好 但我正在学习 python 中的回归建模 我在下面使用 statsmodel 编写了一些代码来创建一个简单的线性回归模型 import statsmodels api as sm import num
  • 根据另一个非索引数组中的值从 numpy 数组中选择元素

    假设我有以下两个数组 a array 1 L 74 423088306605 5 H 128 05441039929008 2 L 68 0581377353869 0 H 88 15726964130869 4 L 97 45015825
  • 确定列的累积最大值

    我正在尝试以下代码 df pd DataFrame 23 52 36 49 52 61 75 82 97 12 columns A B df C np where df A gt df C shift df A df C shift pri
  • 使用 Numpy 与 einsum 和 tensordot 进行相同的操作

    假设我有两个 3D 数组A and B形状的 3 4 N and 4 3 N 我可以计算沿第三轴的切片之间的点积 with einsum np eisum ikl kjl gt ijl A B 是否可以执行相同的操作numpy tensor
  • 解码来自 S60 设备的 WBXML SyncML 消息

    我正在尝试解码来自诺基亚 N95 的 WBXML 编码的 SyncML 消息 我的第一次尝试是使用 python pywbxml 模块 它包装了对 libwbxml 的调用 用此方法解码消息会得到许多 标签以及 标签内的一大块二进制文件 我
  • 使用 isdigit 表示浮点数?

    a raw input How much is 1 share in that company while not a isdigit print You need to write a number n a raw input How m
  • Dataframe unstack 性能 - pandas

    我正在尝试拆开数据框 它工作正常 但问题是我正在处理 CSV 文件中的巨大数据集 约 10 亿 这是示例数据集 236539 48512569874 Name Danny 236539 48512569874 Class 12 236539
  • if(interactive()) 是否相当于 Python 中的“if __name__ == ”__main__“: main()”?

    我希望 R 脚本有一个 main 函数 可以在交互模式下执行 但在获取文件时不应执行 main 函数 已经有一个关于这个的问题了 https stackoverflow com questions 2968220 is there an r
  • 与 GridSearchCV 的并行错误,与其他方法一起工作正常

    我使用 GridSearchCV 时遇到以下问题 它在使用时给我一个并行错误n jobs gt 1 同时n jobs gt 1与 RadonmForestClassifier 等单一模型配合良好 下面是一个显示错误的简单工作示例 train
  • 使用 selenium 和 firefox 保存图像

    我正在尝试使用 selenium 服务器和 python 客户端从网站保存图像 我知道图像的 URL 但我无法找到保存它的代码 无论是当它是文档本身还是当它嵌入到当前浏览器会话中时 到目前为止我找到的解决方法是保存页面的屏幕截图 有两种硒方
  • 写入抓取数据的 csv 文件时如何拆分项目名称

    我有兴趣使用 R 从网上抓取的数据创建 csv 或类似的 Excel 兼容文件 到目前为止 我通过执行以下操作来存储数据 require textreadr spiegel lt read html http www spiegel de
  • 使用 python 更改目录

    我碰巧发现我无法从 python 代码中更改实际目录 我的测试程序如下 from os import system def sh script system bash c s script sh cd home sh pwd 的输出pwd
  • 将 tf.contrib.layers.xavier_initializer() 更改为 2.0.0

    我该如何改变 tf contrib layers xavier initializer tf 版本 gt 2 0 0 所有代码 W1 tf get variable W1 shape self input size h size initi
  • 使用 matplotlib 在 python3 中对多个形状进行动画处理

    尝试在 python3 中使用 matplotlib 动画函数同时对多个对象进行动画处理 下面写的代码是我到目前为止的位置 我能够创建多个对象并将它们显示在图中 我通过使用包含矩形补丁函数的 for 循环来完成此操作 从这里开始 我希望通过
  • 数据框更新后如何刷新绘图?

    假设您已经使用以下方法构建了一个图形px line 使用数据框 数据框稍后会添加新数据 用新数据刷新数据的好方法是什么 一个例子可以是px data stocks 从列的子集开始 GOOG AAPL AMZN FB NFLX MSFT 例如
  • Python google云函数部署失败-Madmom pip包

    我正在尝试使用 madmom python pip 包部署 Python3 7 Google Cloud Function 但是指定madmom 0 16 1requirements txt 中的内容导致部署失败 当我从requiremen

随机推荐