首页 > 解决方案 > os.remove 通过删除文件的内容而不是文件本身来表现怪异

问题描述

我正在编写一个网络爬虫,总共必须下载 8000 个文件。在我的脚本中,我连续下载文件并在提取相关信息后删除前一个文件。要删除文件,我使用“os.remove(downloaded_file)”。到目前为止,在 500+ 次下载中,有 3 次它没有删除文件,只是删除了文件的内容,因此当脚本试图从空文件中复制内容时发生异常。有没有人经历过这种情况或可以解释发生了什么?在 Windows 10 上工作

到目前为止,我无法确定有关此错误的任何相关信息。

def copy_to_master_and_delete_df(downloaded_file,master_file):
    '''open a downloaded csv file, copy the data (line 10), append to master file and delete the downloaded file'''
    while not os.path.exists(downloaded_file):
        time.sleep(0.5)
        log(f'waiting for {bank} {quarter} to download')
    with open(downloaded_file, encoding='utf-8') as df:
        data = list(df.readlines())[-1]
    os.remove(downloaded_file)
    while os.path.exists(downloaded_file):
        time.sleep(0.1)
        log(f'waiting for {bank} {quarter} to be deleted')
    with open(master_file, 'a', encoding='utf-8') as mf:
        mf.write(data)

在 data = list(df.readlines())[-1] 它给出了一个例外:

Exception has occurred: IndexError
list index out of range

发生这种情况是因为前面描述的内容被删除,而不是文件本身。为了稍微解决这个问题,我放了一个无限

    while os.path.exists(downloaded_file):
        time.sleep(0.1)
        log(f'waiting for {bank} {quarter} to be deleted')

这使我可以手动删除文件并使脚本不会崩溃。

我正在寻求帮助,因为它达到了一个新的水平。该脚本以某种方式跳过了我检查文件是否被删除的行(再次,内容已删除但文件未删除)并下载了下一个,因此脚本在查看空文件时崩溃了。关于为什么会发生这种情况或如何处理的任何想法?

标签: pythonoperating-system

解决方案


我怀疑这是缓冲区刷新问题。尝试在 Windows 上调用 , 来执行删除操作,或者os.sync()此处查看用于在打开文件时禁用缓冲的缓冲选项。os.fsync()


推荐阅读