繁体   English   中英

在True Loop中用np.save在Python中编写一个大文件

[英]Writing a big file with np.save in Python in a while True Loop

我正在使用一会儿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可能很危险,因为您的循环永远都不会退出-我为简洁起见,只是假设您编写了此代码,但是最好先break或将其设为while <conditional这样您就不会意外地迫使循环执行在中间文件写入时退出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM