簡體   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