1

while True ループで Web サイトをスクレイピングし、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 がそれを読み取れるようにすることでしたが、それが可能かどうかはわかりません。

4

1 に答える 1

0

ファイルが踏みにじられたり上書きされたりするのを避けるために、これを避けるために 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ループが終了しないため危険な場合があります-簡潔にするためにこれを書いたばかりだと思いますが、ファイル書き込みの途中で誤ってループを終了させないようにbreakorがあるとよいでしょうwhile <conditional.

于 2012-12-20T08:59:20.080 に答える