2012-11-22 1 views
1

while 루프를 사용하여 웹 사이트를 긁어 내고 모든 데이터를 np.savez 파일에 저장합니다. npz 파일을 처리하고 싶지만 파일을 복사하는 것보다 빠르게 파일을 업데이트합니다. 여기에 내 코드입니다 :파이썬에서 np.save로 빅 파일 작성하기 True 루프

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 파일처럼 보이고 파이썬이 읽을 수 있다는 것이었지만, 가능하다면 나는 모른다.

+0

'.npz' 파일은 단지 .npy 파일의 압축 파일이므로 zip 유틸리티로 파일을 처리 할 수 ​​있습니다. 당신이 만든 데이터를 구할 수있는 방법이 있는지 묻고 있습니까? 나는 당신의 문제가 정확히 어디 있는지 분명하지 않다. –

+0

잘린 파일을 복구하려고한다면'zip -FF --out repaired_file.npz'을 시도하십시오. 일부 데이터가 손실되었을 수도 있지만 데이터를 대부분 복구 할 수 있습니다. –

답변

0

파일을 짓밟거나 덮어 쓰지 않으려면이 문제를 피하기 위해 파이썬 코드를 작성하십시오. 예를 들어 각 사이트의 새 파일에 저장하고 디렉토리에서 이러한 파일을 수집 할 수 있습니다.

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을 가지므로 실수로 파일을 중간 기록 할 때 루프를 종료하지 마십시오.