为什么我的Python代码在从文本文件中读取时会打印额外的字符""?

vrk*_*esh 22 python file-handling

try:
    data=open('info.txt')
    for each_line in data:
        try:
            (role,line_spoken)=each_line.split(':',1)
            print(role,end='')
            print(' said: ',end='')
            print(line_spoken,end='')
        except ValueError:
            print(each_line)
    data.close()
except IOError:
     print("File is missing")
Run Code Online (Sandbox Code Playgroud)

当逐行打印文件时,代码往往会在前面添加三个不必要的字符,即"".

实际产量:

Man said:  Is this the right room for an argument?
Other Man said:  I've told you once.
Man said:  No you haven't!
Other Man said:  Yes I have.
Run Code Online (Sandbox Code Playgroud)

预期产量:

Man said:  Is this the right room for an argument?
Other Man said:  I've told you once.
Man said:  No you haven't!
Other Man said:  Yes I have.
Run Code Online (Sandbox Code Playgroud)

sen*_*hin 45

我找不到Python 3的副本,它处理编码的方式与Python 2不同.所以这里是答案:不是用默认编码打开文件(即'utf-8'),使用'utf-8-sig',期望和剥离UTF- 8字节顺序标记,显示为.

也就是说,而不是

data = open('info.txt')
Run Code Online (Sandbox Code Playgroud)

data = open('info.txt', encoding='utf-8-sig')
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用的是Python 2,您应该看到例如Python,将输出编码为UTF-8并将带有BOM的UTF-8转换为UTF-8,而在Python中没有BOM.你需要在Python 2中使用codecs或者使用它来做一些恶作剧str.decode.但是在Python 3中,你需要做的就是encoding=在打开文件时设置参数.