如何使用 Python 检查文件保存是不是完成?
Posted
技术标签:
【中文标题】如何使用 Python 检查文件保存是不是完成?【英文标题】:How to check a file saving is complete using Python?如何使用 Python 检查文件保存是否完成? 【发布时间】:2010-05-17 09:46:57 【问题描述】:我正在尝试自动化下载过程。在此我想知道,特定文件的保存是否完成。场景是这样的。
-
使用 Chrome 或 Firefox(任何浏览器)打开网站地址
使用“Crtl + S”将页面保存到磁盘(我在 Windows 上工作)
现在如果页面很大,那么保存需要几秒钟。保存完成后,我想解析 html。
由于我无法控制浏览器的保存功能,我不知道保存是否已完成。
我想到的一个想法是,使用 while 循环获取文件的 md5sum,并检查计算的前一个,然后继续 while 循环,直到前一个和当前一个匹配的 md5 总和。我猜这不起作用,因为浏览器似乎首先尝试将文件保存在 tmp 文件中,然后将内容复制到指定的文件(或只是重命名文件)。
有什么想法吗?我使用 python 进行自动化,因此欢迎任何可以使用 python 实现的想法。
谢谢 英德拉吉特
【问题讨论】:
为什么不用python下载呢?它会让你完全控制 【参考方案1】:在 Windows 上,您可以尝试以独占访问模式打开文件,以检查它是否正在被其他程序使用(读取或写入)。我用它来等待服务器端完成 FTP 上传,代码如下:
def check_file_ready(self, path):
'''Check if file is not opened by another process.'''
handle = None
try:
handle = win32file.CreateFile(
path,
win32file.GENERIC_WRITE,
0,
None,
win32file.OPEN_EXISTING,
win32file.FILE_ATTRIBUTE_NORMAL,
None)
return True
except pywintypes.error, e:
if e[0] == winerror.ERROR_SHARING_VIOLATION:
# Note: other possible error codes include
# winerror.ERROR_FILE_NOT_FOUND
# winerror.ERROR_PATH_NOT_FOUND
# winerror.ERROR_ACCESS_DENIED.
return False
raise
finally:
if handle:
win32file.CloseHandle(handle)
注意:此函数会重新引发除共享冲突之外的所有 win32 错误。您应该事先检查文件是否存在或检查函数中的其他错误代码(参见第 15 行的注释)。
【讨论】:
以上是关于如何使用 Python 检查文件保存是不是完成?的主要内容,如果未能解决你的问题,请参考以下文章