os.remove通过删除文件内容而不是文件本身来行事很奇怪

时间:2019-05-01 20:14:24

标签: python operating-system

我正在编写一个Web抓取工具,总共必须下载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')

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

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

1 个答案:

答案 0 :(得分:0)

我怀疑这是缓冲区刷新问题。尝试在删除操作之后通过在Windows上调用os.sync()os.fsync()或在打开文件时禁用缓冲的 buffering 选项查看here