Windows上的os.path.getsize在复制时报告完整文件大小
我正在将一个2.23GB(2401129714字节)的大文件从一个位置复制到网络共享上的另一个位置。我使用下面的代码通过检查文件大小来检查文件何时完成复制。我使用的是Windows7Python2.7.11,并且Windows上的os.path.getsize在复制时报告完整文件大小,windows,file,python-2.7,os.path,Windows,File,Python 2.7,Os.path,我正在将一个2.23GB(2401129714字节)的大文件从一个位置复制到网络共享上的另一个位置。我使用下面的代码通过检查文件大小来检查文件何时完成复制。我使用的是Windows7Python2.7.11,并且os.path.getsize会报告文件的完整大小一旦文件开始复制,文件就不会增长。有没有其他方法可以判断Python中的文件何时完成复制 copying = True size2 = -1 while copying: size = os.path.getsize('name
os.path.getsize
会报告文件的完整大小一旦文件开始复制,文件就不会增长。有没有其他方法可以判断Python中的文件何时完成复制
copying = True
size2 = -1
while copying:
size = os.path.getsize('name of file being copied')
if size == size2:
print "File has finished copying"
break
else:
size2 = os.path.getsize('name of file being copied')
time.sleep(2)
您可以如上所述使用。有关用法的示例,请参见。编辑:解决方案-
import os
import time
def main( event, path ):
if os.path.exists(path):
while True:
try:
new_path= path + "_"
os.rename(path,new_path)
os.rename(new_path,path)
time.sleep(0.05)
print("event type: %s path: %s " %(event.event_type, path))
break
except OSError:
time.sleep(0.05)
我利用了一个事实,即没有两个进程可以模拟地利用一个文件进行IO操作。在windows中,复制文件时,操作系统进程会将其保持打开状态。复制完成后,OS进程将关闭该文件,python中的OS模块最终可以成功重命名该文件
@Anmol-不是重复的。在windows中,此代码的问题在于操作系统保留了一个二进制文件,并在复制时对其进行写入,因此os.stat显示的大小不会递增。我们需要一段代码,在图像复制完成时通知我们。此特定代码是一个轮询代码,在linux上运行良好,并在复制过程完成时通知我们(在linux中,大小随时间递增)
输出应该是
Size now 124
Size now 12345
Size now 238590
.....
,而不是仅仅
Size now 23459066950
os.stat()和os,path.getsize()显示最终分配的大小唯一的解决方案是尝试执行代码并使用try-catch块,然后休眠重试
这也可以在Linux上使用,这样您就不用麻烦轮询您刚刚重试的大小。当然,下面的代码应该稍加改进,以确保不会遇到无限循环
while True:
try:
OsAbstract.copy(src, file_metas.get_tmp_full_destination())
break
except PermissionError:
time.sleep(0.5)
os.path.getsize报告文件开始复制时的完整文件大小,文件不会增长。
这意味着什么?os.stat()和os可能重复,path.getsize()显示最终分配的大小唯一的解决方案是尝试执行代码并设置一个try-catch块,然后休眠重试
while True:
try:
OsAbstract.copy(src, file_metas.get_tmp_full_destination())
break
except PermissionError:
time.sleep(0.5)