Saya berasumsi ini pasti masalah memori tetapi saya tidak yakin. Program loop melalui PDF untuk mencari file yang rusak. Ketika file rusak, ia menulis lokasi itu ke file txt untuk saya tinjau nanti. Saat menjalankannya pertama kali, saya mencatat skenario lulus dan gagal ke log. Setelah 67381 entri log, itu berhenti. Kemudian saya mengubah logika ini sehingga hanya mencatat kesalahan, namun, di konsol saya memang menampilkan hitungan loop sehingga saya dapat mengetahui seberapa jauh prosesnya. Ada sekitar 190 ribu file yang harus dilewati dan tepat 67381 hitungan berhenti setiap saat. Sepertinya program python masih berjalan di latar belakang karena memori dan cpu terus berfluktuasi tetapi sulit untuk memastikannya. Saya juga tidak tahu sekarang apakah masih akan menulis kesalahan ke log.

Ini kodenya,

import PyPDF2, os
from time import gmtime,strftime

path = raw_input("Enter folder path of PDF files:")
t = open(r'c:\pdf_check\log.txt','w')
count = 1
for dirpath,dnames,fnames in os.walk(path):
    for file in fnames:
        print count
        count = count + 1
        if file.endswith(".pdf"):
            file = os.path.join(dirpath, file)
            try:
                PyPDF2.PdfFileReader(open(file, "rb"))
            except PyPDF2.utils.PdfReadError:
                curdate = strftime("%Y-%m-%d %H:%M:%S", gmtime())
                t.write (str(curdate) + " " + "-" + " " + file + " " + "-" + " " + "fail" + "\n")
            else:
                pass
                #curdate = strftime("%Y-%m-%d %H:%M:%S", gmtime())
                #t.write(str(curdate) + " " + "-" + " " + file + " " + "-" + " " + "pass" + "\n")

t.close()

Sunting 1: (Kode Baru) Kode baru dan masalah yang sama:

import PyPDF2, os
from time import gmtime,strftime

path = raw_input("Enter folder path of PDF files:")
t = open(r'c:\pdf_check\log.txt','w')
count = 1
for dirpath,dnames,fnames in os.walk(path):
    for file in fnames:
        print count
        count = count + 1
        if file.endswith(".pdf"):
            file = os.path.join(dirpath, file)
            try:
                with open(file,'rb') as f:
                    PyPDF2.PdfFileReader(f)
            except PyPDF2.utils.PdfReadError:
                curdate = strftime("%Y-%m-%d %H:%M:%S", gmtime())
                t.write (str(curdate) + " " + "-" + " " + file + " " + "-" + " " + "fail" + "\n")
                f.close()
            else:
                pass
                f.close()
                #curdate = strftime("%Y-%m-%d %H:%M:%S", gmtime())
                #t.write(str(curdate) + " " + "-" + " " + file + " " + "-" + " " + "pass" + "\n")

t.close()

Sunting 2: Saya mencoba menjalankan ini sekarang dari mesin yang berbeda dengan perangkat keras yang lebih besar dan versi windows yang berbeda (10 pro alih-alih server 2008 r2) tetapi saya rasa ini bukan masalahnya.

2
HMan06 12 Oktober 2017, 22:20
1
PyPDF2.PdfFileReader(open(file, "rb")) tidak dijamin akan menutup file. Gunakan manajer konteks untuk membuat file pegangan ditutup (tidak ada salahnya)
 – 
Jean-François Fabre
12 Oktober 2017, 22:21
1
Bagaimana cara berhentinya? diam-diam?
 – 
Jean-François Fabre
12 Oktober 2017, 22:22
Ya, itu hanya membeku, program python masih berjalan di task manager dan cpu dan memori berubah tetapi tidak ada yang terjadi setelah menunggu sangat lama.
 – 
HMan06
12 Oktober 2017, 22:31

2 jawaban

Coba edit salah satu file .pdf agar lebih besar. Dengan begitu, jika nomor loop yang "dihentikan" program Anda lebih kecil, Anda dapat mengidentifikasi masalah sebagai masalah memori.

Selain itu, mungkin file pdf besar luar biasa yang membutuhkan waktu lama bagi program Anda untuk memverifikasi integritas.

Men-debug ini, Anda dapat mencetak lokasi file dari file .pdf yang Anda buka untuk menemukan .pdf khusus ini dan membukanya secara manual untuk menyelidiki lebih lanjut..

0
Austin A 12 Oktober 2017, 22:31

Menemukannya. Masalahnya sebenarnya karena PDF rusak yang acak dan sangat besar. Jadi ini bukan masalah loop, ini masalah file yang rusak.

0
HMan06 13 Oktober 2017, 00:11