再次:UnicodeEncodeError:ascii 编解码器无法编码

2024-03-05

我有一个我想要解析的 XML 文件的文件夹。我需要从这些文件的元素中获取文本。它们将被收集并打印到 CSV 文件中,其中的元素按列列出。

I can实际上现在就这样做some我的文件。也就是说,对于我的许多 XML 文件,该过程进展顺利,并且我得到了我想要的输出。执行此操作的代码是:

import os, re, csv, string, operator
import xml.etree.cElementTree as ET
import codecs
def parseEO(doc):
    #getting the basic structure
    tree = ET.ElementTree(file=doc)
    root = tree.getroot()
    agencycodes = []
    rins = []
    titles =[]
    elements = [agencycodes, rins, titles]
    #pulling in the text from the fields
    for elem in tree.iter():
        if elem.tag == "AGENCY_CODE":
            agencycodes.append(int(elem.text))
        elif elem.tag == "RIN":
            rins.append(elem.text)
        elif elem.tag == "TITLE":
            titles.append(elem.text)
    with open('parsetest.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerows(zip(*elements))


parseEO('EO_file.xml')     

但是,在输入文件的某些版本上,我收到臭名昭著的错误:

'ascii' codec can't encode character u'\x97' in position 32: ordinal not in range(128)

完整的回溯是:

    ---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-15-28d095d44f02> in <module>()
----> 1 execfile(r'/parsingtest.py') # PYTHON-MODE

/Users/ian/Desktop/parsingtest.py in <module>()
     91         writer.writerows(zip(*elements))
     92 
---> 93 parseEO('/EO_file.xml')
     94 
     95 

/parsingtest.py in parseEO(doc)
     89     with open('parsetest.csv', 'w') as f:
     90         writer = csv.writer(f)
---> 91         writer.writerows(zip(*elements))
     92 
     93 parseEO('/EO_file.xml')
UnicodeEncodeError: 'ascii' codec can't encode character u'\x97' in position 32: ordinal not in range(128)

通过阅读其他线程,我相当有信心问题出在正在使用的编解码器中(而且,你知道,错误也很清楚)。但是,我读过的解决方案没有帮助me(强调是因为我知道我是问题的根源,而不是人们过去回答的方式)。

几种回应(例如:this one https://stackoverflow.com/questions/11285866/unicodeencodeerror-ascii-codec-cant-encode-character and this one https://stackoverflow.com/questions/1653569/unicodeencodeerror-ascii-codec-cant-encode-character?rq=1 and this one https://stackoverflow.com/questions/2513027/encoding-gives-ascii-codec-cant-encode-character-ordinal-not-in-range128)不直接处理 ElementTree,而且我不确定如何将解决方案转化为我正在做的事情。

其他处理 ElementTree 的解决方案(例如:this one https://stackoverflow.com/questions/13493477/unicodeencodeerror-ascii-codec-cant-encode-characters and this one https://stackoverflow.com/questions/12349728/elementtree-and-unicode)要么使用短字符串(此处的第一个链接),要么使用 ElementTree 中的 .tostring/.fromstring 方法,但我不这样做。 (当然,也许我应该这样做。)

我尝试过但不起作用的事情:

  1. 我尝试通过 UTF-8 编码引入文件:

    infile = codecs.open('/EO_file.xml', encoding="utf-8")
    parseEO(infile)
    

    但我认为 ElementTree 进程已经将其理解为 UTF-8(在我拥有的所有 XML 文件的第一行中都注明了),因此这不仅不正确,而且实际上又是多余的错误。

  2. 我尝试在循环内声明一个编码过程,替换:

    tree = ET.ElementTree(file=doc)
    

    with

    parser = ET.XMLParser(encoding="utf-8")
    tree = ET.parse(doc, parser=parser)
    

    在上面的循环中确实有效。这对我来说也不起作用。之前有效的相同文件仍然有效,造成错误的相同文件仍然会造成错误。

还有很多其他随机尝试,但我不会详细说明这一点。

因此,虽然我认为我所拥有的代码效率低下并且不利于良好的编程风格,但它确实满足了我对多个文件的要求。我试图了解是否只是缺少一个我不知道的参数,是否应该以某种方式预处理文件(我还没有确定有问题的字符在哪里,但确实知道你'\ x97 转换为某种控制字符),或其他一些选项。


您正在解析 XML; XML API 为您提供帮助unicode价值观。然后您尝试将 unicode 数据写入 CSV 文件without首先对其进行编码。然后,Python 尝试为您对其进行编码,但失败了。您可以在回溯中看到这一点,它是.writerows()调用失败,并且错误告诉您encoding失败,并且无法解码(解析 XML)。

您需要选择一种编码,然后在写入之前对数据进行编码:

for elem in tree.iter():
    if elem.tag == "AGENCY_CODE":
        agencycodes.append(int(elem.text))
    elif elem.tag == "RIN":
        rins.append(elem.text.encode('utf8'))
    elif elem.tag == "TITLE":
        titles.append(elem.text.encode('utf8'))

我使用 UTF8 编码,因为它可以处理任何 Unicode 代码点,但您需要做出自己的明确选择。

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

再次:UnicodeEncodeError:ascii 编解码器无法编码 的相关文章

  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • 如何使用ffmpeg命令生成RTMP测试流?

    我想通过生成带有时间戳的 RTMP 测试视频来测试我的流媒体基础设施 这可能看起来像那样screen https s media cache ak0 pinimg com originals 65 25 9c 65259ca7ebaba59
  • 如果只有一列,为什么 Pandas 转换会失败

    看完这个之后question https stackoverflow com questions 19265942 pandas create a new column filled with the number of observati
  • 如何使用本机 Win32 API 从焦点窗口获取选定的文本?

    我的应用程序 将在系统上运行尝试监视热键 当用户在任何窗口中选择某些文本并按下热键时 当我收到 WM HOTKEY 消息时 如何获取所选文本 为了将文本捕获到剪贴板 我尝试发送Ctrl C using keybd event and Sen
  • SQL Server 2012 中的 group_concat 与 ORDER BY 另一列

    我有一个包含约一百万个条目的表 如下所示 customer id purchased at product 1 2012 06 01 00 00 apples 1 2012 09 02 00 00 apples 1 2012 10 01 0
  • 找不到内存泄漏

    我一直在开发 WP7 应用程序 它是图像库应用程序 实现了基本的缩放和轻拂手势 出于测试目的 我将离线图像 它们的文件名已编号 设置为 内容 来编译应用程序 并通过硬编码字符串 稍后将被替换 访问它们 但后来意识到应用程序消耗大量内存 我以
  • C++ - 将 istream_iterator 与 wstringstream 结合使用

    我正在尝试向我编写的程序添加 Unicode 支持 我的 ASCII 代码已编译并包含以下几行 std stringstream stream abc std istream iterator
  • 将自定义列产品可见性添加到 Woocommerce 3 中的管理产品列表

    我正在尝试使用产品的目录可见性值向管理产品列表添加自定义列 基本上 我需要更容易地知道哪些是隐藏的 哪些不是 到目前为止我的子主题的function php的代码 add filter manage edit product columns
  • 如何设置 GitHub.com 中的默认分支?

    我找到了以下信息 但没有找到哪里可以访问它 账户设置里没找到 有回购设置页面吗 您必须是回购所有者吗 https github com blog 421 pick your default branch https github com b
  • 承诺链内的返回值没有被调用

    我正在使用 Promise 库 Bluebird 目前遇到的问题是函数内的所有内容都运行良好 但是当我尝试返回值时 函数反而返回undefined 这是承诺链 function foo createGroupMembers parsedCh
  • 无法安装:错误 0x80070643:无法安装 MSI 包

    我正在尝试安装一个应用程序 msi 我使用 WiX 安装程序创建了一个 exe 它有依赖项 我尝试将其安装在某些电脑上 效果非常好 但在其中一个系统中 当它尝试安装 msi 时 它会给出错误并回滚安装 这是正常的 无法弄清楚为什么它没有安装
  • PHP - 服务器端变量将永远“存在”?

    我正在寻找一种简单的方法来在服务器内存中存储计数器以允许页面加载选择 有点 伪代码 if counter is odd then load page x else even counter load page y increment cou
  • 将用户定义的命令行参数添加到/?窗户

    使用 Inno Setup 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • Oracle CTE 合并

    我正在尝试使用 CTE 公用表表达式 的简单合并语句 但它给出了一个错误 MERGE INTO emp targ USING ERROR at line 4 ORA 00928 missing SELECT keyword 合并语句中不允许
  • 反距离加权插值

    我想计算一个重量作为距离的倒数 例如反距离加权插值 http en wikipedia org wiki Inverse distance weighting double wgt 0 wgt tmp result 0 for int i
  • 单一职责原则在 OOP 中有效吗?

    我正在努力理解如何将单一职责原则与 OOP 结合使用 如果我们要完全遵循这一原则 那么我们是否会留下许多类 其中许多类可能每个都只有一个方法 如果我们不严格遵循这个原则 那么这个原则还有什么意义呢 我喜欢这样陈述单一职责原则 你编写的每件事
  • x86 虚拟化如何工作

    任何人都可以推荐有关虚拟化的好读物吗 我建议英特尔软件开发人员手册 http www intel com products processor manuals 具体来说卷3B http www intel com Assets PDF ma
  • 没有名为“delta.tables”的模块

    我收到以下代码的错误 请帮忙 from delta tables import ModuleNotFoundError No module named delta tables INFO SparkContext Invoking stop
  • 启动 RPC 服务器时出现“端点重复”

    我的程序使用 Microsoft RPC 进行进程间通信 为了准备接收 RPC 调用 程序运行以下序列 RpcServerUseProtseqEp 然后 RpcServerRegisterIf 则 RpcServerListen 该程序按照
  • 如何理解这段由数字组成的 JavaScript 代码

    这是 JavaScript 代码 我认为它是十六进制形式并尝试对其进行解码 但仍然找不到该代码的含义 我在我的博客模板中使用此代码 我想了解这段javascript代码的真正含义
  • 再次:UnicodeEncodeError:ascii 编解码器无法编码

    我有一个我想要解析的 XML 文件的文件夹 我需要从这些文件的元素中获取文本 它们将被收集并打印到 CSV 文件中 其中的元素按列列出 I can实际上现在就这样做some我的文件 也就是说 对于我的许多 XML 文件 该过程进展顺利 并且