你可以在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
您可能需要閱讀本:HTTP:// stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode – sangheestyle
我有一個稍微不同的問題,你建議的線程..因爲該文件是在二進制模式,沒有行結束字符的概念。但是這個代碼似乎仍然是逐行讀取的。它是如何做到的。這是否意味着它解釋字符和閱讀直到EOL? – kvb