gpt4 book ai didi

python - 文件处理中的文件长度

转载 作者:行者123 更新时间:2023-12-04 02:26:05 25 4
gpt4 key购买 nike

我尝试以不同的方式在 python 中查找文本文件的长度。但我怀疑为什么他们会显示这样的输出。
文本文件:

hello 
this is a sample text file.
say hi to python
第一次尝试:
size_to_read = 8

with open('sample.txt', "r") as f:
f_contents = f.read(size_to_read)
print(f'the total length of file is {len(f_contents)}')
while len(f_contents) > 0:
print(f_contents, end="**")
f_contents = f.read(size_to_read)
输出:
output1
第二次尝试:
size_to_read = 8

with open('sample.txt', "r") as f:
f_contents = f.read(size_to_read)
print(f'the total length of file is {len(f.read())}')
while len(f_contents) > 0:
print(f_contents, end="**")
f_contents = f.read(size_to_read)
输出:
output 2
第三次尝试:
size_to_read = 8

with open('sample.txt', "r") as f:
f_contents = f.read(size_to_read)
print(f'the total length of file is {len(f.readline())}')
while len(f_contents) > 0:
print(f_contents, end="**")
f_contents = f.read(size_to_read)
输出:
enter image description here
任何人都可以解释为什么这三个给出不同的输出。

最佳答案

这是由于读取缓冲区。
第一种情况:
最初您读取 8 个字节,然后每次 while 循环迭代读取 8 个字节。这就是为什么每次打印打印 8 个字节。

f_contents = f.read(size_to_read)  # read 8 bytes
注意:您在打印 len 时没有使用 read 函数。
在第二种情况下
最初您读取 8 个字节,但在打印长度时您使用读取功能,默认情况下读取到结束。所以,在while循环中它没有得到任何字节。 (读取缓冲区已结束)
f_contents = f.read(size_to_read)  # reading 8 bytes
print(f'the total length of file is {len(f.read())}') # read rest of the file
在第三种情况下
最初您读取 8 个字节,但是在打印长度时您使用了 readline,它依次读取了最后一行到达的完整行和缓冲区,并在循环中每次迭代打印 8 个字节,如循环中定义的那样。
f_contents = f.read(size_to_read)  # read 8 bytes
print(f'the total length of file is {len(f.readline())}') # read 1 line
为了更好地理解使用 f.tell() 来获取缓冲区的当前位置。
请参见下面的案例 1 示例:
size_to_read = 8

with open('sample.txt', "r") as f:
f_contents = f.read(size_to_read)
print(f'the total length of file is {len(f_contents)}')
while len(f_contents) > 0:
print(f_contents, end="**")
print("\nbytes reached -- {}".format(f.tell())) #current state here
f_contents = f.read(size_to_read)

关于python - 文件处理中的文件长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67538644/

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