你可以在txt文件上同时使用'rt'和'rb',在语言是英文的情况下结果不会有太大不同,看看这个:
>>> f = open('test.txt','rb')
<_io.BufferedReader name='test.txt'>
>>> list(f)
[b'FzListe\n', b'7MA1, 7OS1\n', b'7MA1, 7ZJB\n', b'\n', b'\n', b'7MA2, 7MA3, 7OS1\n', b'76G1, 7MA1, 7OS1\n', b'7MA1, 7OS1\n', b'71E5, 71E6, 7MA1, FSS1\n']
>>>
>>> f = open('test.txt','rt')
>>> list(f)
['FzListe\n', '7MA1, 7OS1\n', '7MA1, 7ZJB\n', '\n', '\n', '7MA2, 7MA3, 7OS1\n', '76G1, 7MA1, 7OS1\n', '7MA1, 7OS1\n', '71E5, 71E6, 7MA1, FSS1\n']
如果文件包含多种语言,就会发生这种情况,请查看二进制部分,它不会对 UTF-8 等字符进行任何解码:
>>> f = open('test.txt','rt')
>>>
>>> list(f)
['علی\n', 'FzListe\n', '7MA1, 7OS1\n', '7MA1, 7ZJB\n', '\n', '\n', '7MA2, 7MA3, 7OS1\n', '76G1, 7MA1, 7OS1\n', '7MA1, 7OS1\n', '71E5, 71E6, 7MA1, FSS1\n']
>>>
>>> f = open('test.txt','rb')
>>> list(f)
[b'\xd8\xb9\xd9\x84\xdb\x8c\n', b'FzListe\n', b'7MA1, 7OS1\n', b'7MA1, 7ZJB\n', b'\n', b'\n', b'7MA2, 7MA3, 7OS1\n', b'76G1, 7MA1, 7OS1\n', b'7MA1, 7OS1\n', b'71E5, 71E6, 7MA1, FSS1\n']
所以答案是肯定的,具体取决于您使用的文件,您可以在同一文件上的 'rt' 和 'rb' 上获得几乎相同或不同的结果
但是你不能在像图片文件这样的二进制文件上使用'rt',因为它会无法理解它的编解码器并引发错误:
>>> f = open('test.jpg','rt')
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9f in position 0: invalid start byte