gpt4 book ai didi

python - 在 Python 中读取文件而不锁定它

转载 作者:行者123 更新时间:2023-12-03 21:07:16 25 4
gpt4 key购买 nike

我想读取一个文件,但没有任何锁定。

with open(source, "rb") as infile:
data = infile.read()
上面的代码可以锁定源文件吗?
可以随时使用新行更新此源文件(例如,在我的脚本运行期间)。
我认为不是因为它仅处于阅读模式(“rb”)。但是我发现我们可以使用Windows API 无锁读取。我没有为我的问题找到简单的答案。
我的脚本在本地运行,但源文件和附加更改的脚本/软件不是(网络驱动器)。

最佳答案

打开文件不会对其进行锁定。事实上,如果您需要确保不同的进程不会同时访问一个文件,那么所有这些进程都必须协同采取特殊步骤以确保一次只有一个进程访问该文件(请参阅 Locking a file in Python )。这也可以通过以下小程序来证明,该程序特意花时间读取文件,以便在程序运行时为另一个进程(即我使用文本编辑器)提供将一些数据附加到文件末尾的机会。该程序每次读取和输出文件一个字节,每次读取之间暂停 0.1 秒。在程序运行期间,我在文件末尾添加了一些附加文本,程序打印了附加文本:

import time


with open('test.txt', "rb") as infile:
while True:
data = infile.read(1)
if data == b'':
break
time.sleep(.1)
print(data.decode('ascii'), end='', flush=True)
如果您需要一个单字节字符串,您可以分段读取文件,然后将这些部分连接在一起。但这不会像通过单次读取读取文件那样具有内存效率:
BLOCKSIZE = 64*1024 # or some other value depending on the file size
with open(source, "rb") as infile:
blocks = []
while True:
data = infile.read(BLOCKSIZE)
if data == b'':
break
blocks.append(data)
# if you need the data in one piece (otherwise the pieces are in blocks):
data = b''.join(blocks)

关于python - 在 Python 中读取文件而不锁定它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65734390/

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