[英]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.