gpt4 book ai didi

Python文件读取 "rb"和 "rt"之间的差异

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:15 24 4
gpt4 key购买 nike

我有以下代码。因为我以二进制模式打开文件,所以将读入变量“line”。是吗

  1. 读取直到出现换行符。返回并重复
  2. 读取直到某个内部缓冲区大小或新行字符。返回并重复
with open('filename', mode='rb') as f:
for line in f:
do_some_process(line)

之前建议的其他答案没有回答这个问题。他们讨论了模式之间的差异,但这里的问题是,假设我以二进制模式读取文本文件,并且我想确保我逐行读取,即读取直到出现换行符。 “b”模式似乎就是这样做的,但这保证总是会发生吗? “b”模式是否读取数据直到出现新行或达到缓冲区大小?我试图了解 Python 如何在幕后处理这个问题。

最佳答案

你可以在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

关于Python文件读取 "rb"和 "rt"之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com