如何在Python中从文件中读取时修复此意外行为

2024-05-15 10:06:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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)']

我的文件包含波浪形字符~,我认为这会导致这种行为。奇怪的是,如果我打印t1t2的内容,它们会正常出现,但是打印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)']

Tags: 文件txt内容列表readlineopent1print
1条回答
网友
1楼 · 发布于 2024-05-15 10:06:15

该文件包含UTF-8编码的数据。tilda字符实际上是由'\xe2\x88\xbc'字符串编码的。当您打印它时,它看起来“正常”,因为某些东西正在将这些字符转换为它的等效unicode字形。你知道吗

使用codecs.opendecode函数获取所需的数据。例如

f = codecs.open("input.txt", 'r', 'utf8')

你应该看到u'\u223c'而不是'\xe2\x88\xbc'

还要注意,您的文件中有代码点U+223C,但您可能打算使用U+007E。你知道吗

相关问题 更多 >