如何使用Python完成文件保存检查?

时间:2010-05-17 09:46:57

标签: python windows save pywin

我正在尝试自动执行下载过程。在此我想知道,特定文件的保存是否已完成。场景就是这样。

  1. 使用Chrome或Firefox(任何浏览器)
  2. 打开网站地址
  3. 使用'Crtl + S'(我在Windows上工作)
  4. 将页面保存到磁盘
  5. 现在如果页面非常大,那么保存需要几秒钟。我想在保存完成后解析html。
  6. 由于我无法控制浏览器保存功能,因此我不知道保存是否已完成。

    我想到的一个想法是使用while循环获取文件的md5sum,并检查前一个计算,并继续while循环,直到前一个和当前一个的md5总和匹配。这似乎不起作用,因为似乎浏览器首先尝试将文件保存在tmp文件中,然后将内容复制到指定的文件(或只是重命名文件)。

    有什么想法吗?我使用python进行自动化,因此欢迎使用python实现的任何想法。

    由于 Indrajith

1 个答案:

答案 0 :(得分:6)

在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行的注释)。