【问题标题】:Python - Processing Unicode (Russian) Txt filePython - 处理 Unicode(俄语)Txt 文件
【发布时间】:2013-05-22 23:33:23
【问题描述】:

在过去的几个小时里,我一直在为俄罗斯制表符分隔的 txt 文件感到困惑。下面是它的样子:

CODE    AD_GROUP    KEYWORD MATCH_TYPE

009966  Автостраховка   автостраховка   Broad
009965  Автостраховка   страховкаавто   Broad
009964  Автостраховка   страховка автомобиля    Broad

目标是解析 txt 文件,现在分别打印每个关键字。

到目前为止我有:

f = open("struct.txt",encoding="UTF-8",errors='strict')

for line in f:
    vals = line.split("\t")
    print(vals[2])

f.close()

但我不断收到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

另外,如果我执行 len(vals) 来查看每个列表的长度,我会得到以下信息:4 1 4 1 这可能意味着 split("\") 不起作用?

我正在使用 Python3.3 和 mac。

最后,我认为 mac 上的命令行不显示西里尔字符不是问题 - 它之前已经做到了没有问题(西方 Windows 版本似乎在这方面失败了)。

请让我知道我做错了什么。

谢谢!

【问题讨论】:

  • Unicode 错误仅与命令行中的打印有关。您可以在 IDLE 中执行您的脚本,它应该可以工作。然后,您可以在长度未按预期工作时获得正确的输出和调试。
  • 您遇到了打印失败。您需要修复终端设置。见wiki.python.org/moin/PrintFails
  • 感谢您的快速回复,但这似乎不是问题(如我的描述中所述)。我刚刚在 Mac 上的 IDLE 中运行它并得到:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
  • 您如何看待带有字符的文件?你在用什么程序?也许文件是 UTF-16
  • 嗨,马克,请参阅下面我对 sberry 的评论。部分工作了!

标签: python cyrillic


【解决方案1】:

使用此代码(Python2.7)

f = open("struct.txt")

for line in f:
    vals = [item for item in line.strip().split("\t") if item != '']
    if len(vals):
        print(vals[2])

f.close()

而您的来源(我对其进行了编辑以确保它有标签)我得到以下输出:

> python so_16703270.py
KEYWORD
автостраховка
страховкаавто
страховка автомобиля

您确定文件中的所有选项卡都有制表符,而某些地方没有空格吗?

【讨论】:

  • 嗨,sberry,我做了一些进一步的挖掘,发现它何时“有效”和“无效”。如果我从 excel 文件中获取数据并将其粘贴到记事本中并另存为 struct.txt(UTF-8 编码),那么它确实可以工作。但是,如果我将 excel 文件另存为 Unicode txt,它将停止工作并且文件大小也更大。你认为这是为什么?另外,保存文件的建议是什么,就好像我首先使用 excel 来构建列一样?如果我尝试使用 .csv,那么西里尔字符会中断 :-( 谢谢并期待您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多