python - 解析文本文件时出现问题(编码?)

标签 python file python-3.x

我正在尝试解析一个文本文件(Valve-KeyValues 语言文件),但遇到了一些问题。我正在使用这个library解析其他 KeyValues 文件,根据我收集到的信息,它工作得很好,但对于语言文件,它只返回一个空字典。
我尝试了一些简单的事情,例如迭代文件中的所有行并检查字符串是否存在(我通过查看文件就知道该字符串存在),但它从未找到它。不过,单个字符似乎可以工作。
如果我将这些行直接打印到控制台中,看起来好像每个字符之间都有一个空格。 我将文件上传到我的谷歌驱动器 here

这是一个语言文件,所以我猜它可以以某种不同的编码存储,但我无法通过谷歌找到任何内容/我真的不知道要在这里搜索什么。

最佳答案

确实,您的文件似乎被编码为 UTF-16:

$ file ~/Downloads/dota_english.txt
~/Downloads/dota_english.txt: Little-endian UTF-16 Unicode C++ program 
text, with very long lines, with CRLF line terminators

这符合您对“每个字符之间有一个空格”的描述( UTF-16 是一个两字节编码;对于 ASCII 文本,这意味着每个字符都表示为一个 ASCII 字节,后跟一个空字节,给出文本中的空格)。

您可以尝试在加载文件时指定编码,例如使用 codecs module :

import codecs
import vdf
d = vdf.load(codecs.open('dota_english.txt', 'r', encoding='utf-16'))

关于python - 解析文本文件时出现问题(编码?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278687/

相关文章:

python .lower() 不工作

C# 文件异常 : cannot access the file because it is being used by another process

python - 按字符串中的数字对字符串列表进行排序?

python - 添加时间戳打印功能

python - split 正态分布

python - 调用statistics.mean()时消耗的列表

python - 如何使用线程在 Python Twisted 服务器中同时运行多个连续任务?

java - 写入 .csv 文件中的新行而不覆盖第一行

xlwings的python,我不明白其中一条规则

python - 用新字符串替换文件中的字符串