【问题标题】:Python XML CSV encoding and charactersPython XML CSV 编码和字符
【发布时间】:2012-02-23 03:44:30
【问题描述】:

昨天有人帮助我解决了一个问题,Lost in XML and Python 我正在尝试比较两个字符串。

  • 字符串一是从 XML 文件中读取的
  • 字符串二是从 CSV 文件中读取的

问题在于两者的存储方式不同:

CSV FILE HAS : "‚"
XML FILE HAS : "‚"

但没有“

在比较时打印字符串告诉我为什么它们不匹配:

这些是它试图匹配的字符串

FROM XML : ‚
FROM CSV : x82

这可能会发生在比这个特定角色更多的角色身上。我的问题是如何解决这个问题?

  • 以不同的方式读取 XML 文件?
  • 以不同的方式读取 CSV 文件?
  • 在比较之前转换存储的字符串?

比较后,匹配的字符串需要以XML中字符串的格式存储并打印回来。

这是我在 csv 文件中打开和阅读的方式:

import csv
csvdata = csv.reader(open('csvsmall.csv'))

csvfile = open(csvinput, "rb")
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)

=============================更新================== ============================

好的,根据回复。我认为最容易找到一种方法将 CSV 文件中的转义字符串转换为 XML 文件中的版本

这意味着转换:

"," which looks like it is being read as x82 to "‚"

是否有人对如何对存储在字典中的所有 csv 值执行此操作有任何提示? :

filenameToLabel = {}
for l,f in (x.strip().split(';') for x in (csvfile.readlines())[1:]):
    filenameToLabel[f] = l

【问题讨论】:

    标签: python xml csv character-encoding


    【解决方案1】:

    将 CSV 数据转换为 HTML 字符引用不是一个好主意。一般来说,最好同时转换为普通 Unicode 和简单 Unicode。

    您的 XML 解析器的输出中有 ‚ 等。这可以使用effbot's unescape function 取消转义,它还处理实体和十六进制字符引用。您应该在从 XML 解析器获取数据后立即执行此操作。

    您应该使用适当的编码解码您的 csv 数据,可能是cp1250 等系列之一。你只给了我们一封信,“῀”\x82。字节 \x82 被所有 Windows 编码 cp1250cp1258 解码为 U+201A SINGLE LOW-9 QUOTATION MARK。为了帮助您选择哪一个,请告诉我们您拥有的任何其他信件,以及创建文件的国家/地区、创建文件的计算机上的有效区域设置、文本所用的语言、任何其他背景信息你有。

    【讨论】:

      【解决方案2】:

      如果 XML 文件确实包含 ‚,意味着指定单个字符,那么您需要通过将 & 转义为 & 来预处理数据。只有在这之后,XML 数据才会包含正确的字符引用,然后您才需要正确解释 XML — 这包括解释字符引用。

      如果 CSV 数据“‚”在字节级别为 0x82,则 CSV 数据采用 windows-1252 编码或类似编码。 CSV 格式本身没有编码迹象,因此您需要从其他来源了解它并应用合适的转码。这意味着在实践中转码为 UTF-8,无论是在读取文件时还是在外部。

      【讨论】:

      • &amp to & 部分似乎得到了正确处理,因为当我打印出它应该相互匹配的两个字符串时,它返回 ‚用于 XML 文件中的字符串,x82 用于 CSV 文件中的字符串。 csv 是由另一个程序生成的,我不知道它使用的编码。但是在编辑器中打开它会显示 "," 返回 x82 的位置。有没有一种简单的方法可以让两个文件使用相同的编码?最好是 XML 中的那个?
      【解决方案3】:

      我遇到的问题似乎和你的一样。解决我的问题的方法是将字符串转换为 unicode,如果不是的话。 我想可能有一种更 Pythonic 的方式,但这对我有用。

      对于 XML 文件的解析,我使用 lxml,它可以编写 unicode xml 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 2022-01-23
        相关资源
        最近更新 更多