我正在编写一个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')
这使我可以手动删除文件并使脚本不崩溃。
我正在寻求帮助,因为它进入了新的高度。该脚本以某种方式跳过了我检查文件是否已删除的行(再次,内容已删除,但文件未删除)并下载了下一个文件,因此该脚本在查找空文件时崩溃了。 为什么发生这种情况或如何处理的任何想法?
答案 0 :(得分:0)
我怀疑这是缓冲区刷新问题。尝试在删除操作之后通过在Windows上调用os.sync()
,os.fsync()
或在打开文件时禁用缓冲的 buffering 选项查看here。>