【问题标题】:Python - How to read multiple lines from text file as a string and remove all encoding?Python - 如何从文本文件中读取多行作为字符串并删除所有编码?
【发布时间】:2020-10-14 11:45:24
【问题描述】:

我有一个包含 77 个项目的列表。我已将所有 77 个项目放在一个文本文件中(每行一个)。

我正在尝试将其读入我的 python 脚本(然后我会将列表中的每个项目与通过 API 提取的另一个列表进行比较)。

问题:由于某种原因,列表中 2/77 的项目具有编码,给我“u00c2”和“u00a2”字符,这意味着它们没有正确比较并且被遗漏。我不知道为什么这些 2/77 有这种编码,但其他 75 很好,我不知道如何在 python 中摆脱编码。

问题:

  • 在 Python 中,如何摆脱编码以确保它们都没有任何特殊/奇怪的字符并且只是纯文本?
  • 在读取文件时,我可以使用什么方法来执行此操作?

这是我将文本文件读入 python 的方式:

with open("name_list2.txt", "r") as myfile:
        policy_match_list = myfile.readlines()

policy_match_list = [x.strip() for x in policy_match_list]

注意 - “policy_match_list”是从文本文件中读取的 77 个策略的列表。

这是我比较两个列表的方式:

    for policy_name in policy_match_list:
        for us_policy in us_policies:
            if policy_name == us_policy["name"]:
                print(f"Match #{match} | {policy_name}")
                match += 1

注意 - “us_policies”是另一个包含数千个策略的列表,通过我正在比较的 API 提取

这导致 75/77 的预期匹配,因为其他 2 个策略比较,例如“text12 - text”到“text12u00c2-u00a2text”而不是“text12 - text”到“text12 - text”

我希望这是有道理的,如果我可以添加更多信息,请告诉我

干杯!

【问题讨论】:

  • 您是否尝试过解码从文件中读取的所有行?
  • 请您提供一些示例代码吗?我试过这个,但它最终删除了大约 30 个项目,我也不明白为什么或如何!
  • 如果可以,请将文件上传到我们可以复制问题的地方以尝试解决它
  • 由于数据的敏感性,我无法上传文件,但它实际上是一个纯文本文件,我已将 77 个项目从 excel(所有单元格文本格式)复制并粘贴到空文本文件。
  • 我刚刚又完全复制了一遍(Excel -> 记事本 -> 新的纯文本文件),它已经解决了这个问题。我不知道为什么会发生这种情况,以及为什么第一次就坏了,但是感谢您对此进行调查

标签: python character-encoding


【解决方案1】:

您是否尝试在从 utf8 解码时打开文件?因为我看不到文件,我无法判断这是问题所在,但该文件可能包含默认解码选项(我认为是拉丁语)无法处理的字符。 尝试做:

with open("name_list2.txt", "r", encoding="utf-8") as myfile:

另外,您可以观看有关如何处理控制字符的问题:Python - how to delete hidden signs from string?

很抱歉没有将其作为评论发布(因为我真的不知道这是否是解决方案),我没有足够的声誉。

【讨论】:

  • 谢谢你,是的,我试过了,但遗憾的是它没有解决问题
  • 这不是一个简单的编码问题,所以这不能解决手头的问题
  • 我刚刚搜索了您在比较示例中提供的代码,该字母是“LATIN CAPITAL LETTER A WITH CIRCUMFLEX”,这意味着他们可能想要一个只去除重音的脚本。如果您想被卡住,您可能想使用正则表达式来解析它,但我没有足够复杂的表达式(这并不容易,因为Unicode“u”与常规“u”之间没有区别") 在我的头顶上不推荐。
  • 所以这很有趣。当我按照 Abhinav 的评论中的建议尝试解码时,我从列表中丢失了大约 30 个奇怪的项目,但它确实添加了你在其他项目中随机描述的那个字符。但是,我不知道那个字符是从哪里来的,因为它不在文本文件中。
  • 这很奇怪。或许可以尝试将您的文件粘贴到这样的网站:soscisurvey.de/tools/view-chars.php 检测不可见字符。
【解决方案2】:

在某些情况下,某些 Unicode 字符未正确解码。在您的情况下,字符 \u00c2\u00a2 导致了问题。截至目前,我看到了两个修复:

  1. 尝试通过替换字符来解析编码(参考https://stackoverflow.com/a/56967370
  2. 将文本复制到新的纯文本文件(如果可能)并保存。在这种情况下,这些额外的字符往往会被忽略并因此被删除。

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 2020-06-13
    • 1970-01-01
    • 2018-11-21
    • 2014-12-09
    • 2022-01-19
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多