在一段时间内用 Python 中的 np.save 编写一个大文件 True Loop



我正在用 while True 循环抓取一个网站,然后使用 np.savez 将所有数据保存到文件中。我想处理 npz 文件,但文件更新速度比我复制它的速度快。这是我的代码:

while True:
  time.sleep(1.5)
  for post in new:
    all_posts.append(post)
  np.savez('records.npz', posts)
  new = other_site.get_next()

最初为了处理我正在抓取的数据,我只会复制文件,但现在文件太大了,每次都会损坏。我可以从头开始重新启动此过程并减少保存频率,这样我就有更多的时间进行复制,但我想知道是否有办法恢复我写入的数据。我的另一个想法是截断文件的末尾,使其看起来仍然像一个 npz 文件并且 python 可以读取它,但我不知道这是否可能。

为了避免你的文件被践踏或覆盖,为什么不写一些python代码来避免这种情况呢?例如,您可以保存到每个站点的新文件中,并将这些文件收集到目录中;

import os
os.mkdir('scraped_sites')
while True:
   time.sleep(1.5)
   for post in new:
      all_posts.append(post)
   # create a unique file path
   save_file = os.path.join('scraped_sites', 'records_%s.npz' % other_site)
   np.savez(save_file, all_posts)
   new = other_site.get_next()

这样,您的文件永远不会被践踏,因此您不必担心在再次写入之前处理它。如果您不喜欢命名文件的想法,请查看tempfile

此外,while True可能很危险,因为您的循环永远不会退出 - 我假设您只是为了简洁而编写了这篇文章,但最好有一个breakwhile <conditional,这样您就不会意外地强制循环在文件写入时退出。

相关内容

最新更新