1

我在将文件中的字符串与我在程序中输入的字符串进行比较时遇到问题,我应该知道它们是相等的,但是无论我是否使用 decode('utf-8') 我都会发现它们不相等。这是代码:

final = open("info", 'r')
exported = open("final",'w')
lines = final.readlines()
for line in lines:
    if line == "Wykształcenie i praca": #error
    print "ok"

以及我如何保存我尝试读取的文件:

comm_p = bs4.BeautifulSoup(comm)
comm_f.write(comm_p.prettify().encode('utf-8'))

for string in comm_p.strings:
      #print repr(string).encode('utf-8')
      save = string.encode('utf-8') #  there is how i save
      info.write(save)
      info.write("\n")        

info.close()

在文件的顶部我有 # - - coding: utf-8 - -

有任何想法吗?

4

4 回答 4

3

这应该做你需要的:

# -- coding: utf-8 --
import io

with io.open('info', encoding='utf-8') as final:
    lines = final.readlines()

for line in lines:
    if line.strip() == u"Wykształcenie i praca": #error
        print "ok"

您需要使用正确的编码打开文件,并且由于您的字符串不是 ascii,因此您应该将其标记为 unicode。

于 2012-09-24T07:57:15.093 回答
0

可能差异在于“\ n”字符

readlines不会剥离 '\n' - 请参阅在 Python 中读取换行符分隔文件并丢弃换行符的最佳方法?

一般来说,将 Unicode 字符串放入代码中不是一个好主意,最好从资源文件中读取它

于 2012-09-24T07:50:50.010 回答
0

首先,您需要一些有关编码的基本知识。这是一个很好的起点。您不必立即阅读所有内容,但请尽可能多地阅读。

关于您当前的问题:

您正在读取 UTF-8 编码文件(可能),但您正在将其作为 ASCII 文件读取。open()不会为您进行任何转换。

所以你需要做的(至少):

  • 用于codecs.open("info", "r", encoding="utf-8")读取文件
  • 使用 Unicode 字符串进行比较:if line.rstrip() == u"Wykształcenie i praca":
于 2012-09-24T07:54:50.120 回答
0

使用 unicode 进行字符串比较

>>> s = u'Wykształcenie i praca'
>>> s == u'Wykształcenie i praca'
True
>>>

说到字符串 unicode 是最聪明的举动:)

于 2012-09-24T07:59:05.747 回答