python - 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')
这使我可以手动删除文件并使脚本不会崩溃。
我正在寻求帮助,因为它达到了一个新的水平。该脚本以某种方式跳过了我检查文件是否被删除的行(再次,内容已删除但文件未删除)并下载了下一个,因此脚本在查看空文件时崩溃了。关于为什么会发生这种情况或如何处理的任何想法?
解决方案
我怀疑这是缓冲区刷新问题。尝试在 Windows 上调用 , 来执行删除操作,或者os.sync()
在此处查看用于在打开文件时禁用缓冲的缓冲选项。os.fsync()
推荐阅读
- python - 在不同的集合中添加列
- ios - 从 paypal ios sdk swift 获取送货地址和发票号码
- ios - 在 Swift 中将带有“\n”的数组元素合并到字符串中
- sql - 在 oracle 中检查模式表空间的使用情况
- javascript - 在茉莉花测试中模拟声明 const
- python - 如何确保所有文件在 Python 中共享相同的结构?
- java - 使用 selenium,java 在 chrome 驱动程序中禁用 css 渲染
- ruby-on-rails - Heroku 部署失败 | 宝石安装 json -v '1.8.1'
- react-native - 在 React Native 中使用 requestAnimationFrame
- android - SliderLayout 总是拍错图片