再次: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 编解码器无法编码 的相关文章

随机推荐

  • 如何使用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 文件 该过程进展顺利 并且