【问题标题】:UnicodeWarning when comparing unicode strings to unicode results from os.walk command将 unicode 字符串与 os.walk 命令的 unicode 结果进行比较时出现 UnicodeWarning
【发布时间】:2011-06-06 22:12:11
【问题描述】:

使用 python 2.7 我正在使用这些文件 http://www.2shared.com/file/biSx7NI-/comer.html 执行 os.walk,然后将结果与数组进行比较。在实际程序中,该数组不会被预定义。我尝试使用的代码如下

# -*- coding: utf-8 -*-
import os.path
group = ['comer.txt', 'coma.txt', 'comamos.txt', 'coman.txt', 'comas.txt', 'come.txt', 'comed.txt', 'comemos.txt', 'comen.txt', 'comeremos.txt', 'comer\xc3\xa1.txt', 'comer\xc3\xa1n.txt', 'comer\xc3\xa1s.txt', 'comer\xc3\xa9.txt', 'comer\xc3\xa9is.txt', 'comer\xc3\xada.txt', 'comer\xc3\xadais.txt', 'comer\xc3\xadamos.txt', 'comer\xc3\xadan.txt', 'comer\xc3\xadas.txt', 'comes.txt', 'comido.txt', 'comiendo.txt', 'comiera.txt', 'comierais.txt', 'comieran.txt', 'comieras.txt', 'comiere.txt', 'comiereis.txt', 'comieren.txt', 'comieres.txt', 'comieron.txt', 'comimos.txt', 'comiste.txt', 'comisteis.txt', 'comi\xc3\xa9ramos.txt', 'comi\xc3\xa9remos.txt', 'comi\xc3\xb3.txt', 'como.txt', 'com\xc3\xa1is.txt', 'com\xc3\xa9is.txt', 'com\xc3\xad.txt', 'com\xc3\xada.txt', 'com\xc3\xadais.txt', 'com\xc3\xadamos.txt', 'com\xc3\xadan.txt', 'com\xc3\xadas.txt', 'comer\xc3\xa1.txt', 'comer\xc3\xa9.txt', 'comer\xc3\xada.txt', 'comer\xc3\xadais.txt']

print "********what we have*********"
i=0
for f in group:
    group[i] = os.path.basename(f)
    group[i] = unicode(group[i], "utf-8")        
    print group[i]
    i += 1

wantedResults = []
print "********what we want*********"
for(path, dirs, files) in os.walk("C:\corpus\zz-auto generated\spanish\comer"):
    wantedResults.append(files)
for f in wantedResults[0]:
    print f

print "********problems*********"
for resultWanted in wantedResults[0]:
    if resultWanted not in group:
        print "did not match our wanted results: " + resultWanted
for result in group:
    if result not in wantedResults[0]:
        print "extra file: " + result

我收到此错误:

警告(来自警告模块): 文件“C:\Users***\Desktop\osWalkTest.py”,第 26 行 如果结果不在 WantResults[0] 中: UnicodeWarning: Unicode 相等比较未能将两个参数转换为 Unicode ->将它们解释为不相等

我真的可以使用一些帮助来获取预定义数组和从 os.walk 正确比较的数组。我在谷歌上查过这个,并尝试了许多编码和解码这两个数组的组合,但似乎没有任何效果。谢谢。

【问题讨论】:

  • 当使用# coding: utf-8 时,您可以使用group = [u'comerán.txt',...] 而不是像['comer\xc3\xa1n.txt',...] 这样的手动编码utf-8 字节字符串并在它们上调用unicode。不过,请确保以 UTF-8 编码实际保存文件。

标签: python unicode utf-8 python-2.7 os.walk


【解决方案1】:

您尝试过吗(注意字符串前面的“u”,它会将其转换为 Unicode):

for(path, dirs, files) in os.walk(u"C:/corpus/zz-auto generated/spanish/comer"):

(请注意,在字符串中使用反斜杠不是一个好主意,无论是否为 Unicode)。

【讨论】:

  • 成功了!非常感谢,我一直在寻找这个问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多