我试图用python逐行阅读这个简单的文件:
q(A) p(B)
q(z) ∼p(x)
然后从每一行剥离newline
,然后将其添加到列表中。你知道吗
lst = []
f = open("input.txt", 'r')
t1 = f.readline().rstrip('\n')
t2 = f.readline().rstrip('\n')
lst.append(t1)
lst.append(t2)
print lst
问题是,当我打印列表的内容时,我得到以下输出:
['q(A) p(B)', 'q(z) \xe2\x88\xbcp(x)']
我的文件包含波浪形字符~
,我认为这会导致这种行为。奇怪的是,如果我打印t1
和t2
的内容,它们会正常出现,但是打印lst
的内容会出现不同
编辑:回答
好吧,我终于如愿以偿了。如果任何人遇到相同的问题,可参考此解决方案:
import codecs
f = codecs.open("input2.txt", 'r', encoding='utf8')
lst = []
t1 = f.readline().rstrip('\n')
t2 = f.readline().rstrip('\n')
res1 = ""
res2 = ""
for i in xrange(0,len(t1)):
if ord(t1[i]) == 8764:
res1 += "~"
else:
res1 += chr(ord(t1[i]))
for i in xrange(0,len(t2)):
if ord(t2[i]) == 8764:
res2 += "~"
else:
res2 += chr(ord(t2[i]))
lst.append(res1)
lst.append(res2)
print lst
现在输出如下:
['q(A) p(B)', 'q(z) ~p(x)']
该文件包含UTF-8编码的数据。tilda字符实际上是由
'\xe2\x88\xbc'
字符串编码的。当您打印它时,它看起来“正常”,因为某些东西正在将这些字符转换为它的等效unicode字形。你知道吗使用
codecs.open
或decode
函数获取所需的数据。例如你应该看到
u'\u223c'
而不是'\xe2\x88\xbc'
还要注意,您的文件中有代码点U+223C,但您可能打算使用U+007E。你知道吗
相关问题 更多 >
编程相关推荐