如何使用 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 检查文件保存是不是完成?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查TXT文本是否ANSI编码格式的?

如何检查文件是不是正在编辑? (红宝石)

python可以代替人的界面操作,自动完成一系列,比如打开一个软件后,编辑内容,保存。

如何确保文件在复制前完成?

检查文件是不是使用 vba 保存

如何使用PHP检查是不是在下载对话框上单击了保存按钮?