मेरे पास पीडीएफ फाइलों के अंदर के डेटा को पढ़कर .pdf
फाइलों को खोजने के लिए एक कोड है। मेरा समाधान मुझे सही फाइलें देता है, लेकिन यह धीमा है। क्या इसे तेज करने का कोई तरीका है?
keyword = keyword.lower()
for subdir, dirs, files in os.walk(folder_path):
for file in files:
filepath = subdir + os.sep + file
fpath = subdir + os.sep
if(keyword in file.lower()):
if filepath not in tflist:
tflist.append(os.path.join(filepath))
if filepath.endswith(".pdf"):
if filepath not in tflist:
with open(os.path.join(fpath,file), "rb") as f:
reader = PyPDF2.PdfFileReader(f)
for i in range(reader.getNumPages()):
page = reader.getPage(i)
page_content = page.extractText().lower()
if(keyword in page_content):
tflist.append(os.path.join(filepath))
break
#print (str(1+reader.getPageNumber(page)))
#print(keyword)
print(tflist)
1 उत्तर
आप क्या कर सकते हैं multiprocessing.Pool
का उपयोग करें।
अपने कोड को दो भागों में विभाजित करें। पहला टुकड़ा os.walk
का उपयोग करके पथों की एक सूची तैयार करता है। इसे list_of_filenames
कहते हैं।
दूसरा भाग एक फ़ंक्शन है जो फ़ाइल को पढ़ता है और आपके मानदंड के आधार पर प्रत्येक पृष्ठ के लिए फ़ाइल नाम और True
या False
लौटाता है:
def worker(path):
rv = {}
with open(path, "rb") as f:
reader = PyPDF2.PdfFileReader(f)
for i in range(reader.getNumPages()):
page = reader.getPage(i)
page_content = page.extractText().lower()
if(keyword in page_content):
rv[i] = True
else:
rv[i] = False
return (path, rv)
इसे इस तरह इस्तेमाल करें:
import multiprocessing as mp
p = mp.Pool()
for path, rv in p.imap_unordered(worker, list_of_filenames):
print('File:', path)
print('Results:', rv)
यह देखते हुए कि आपके CPU में n कोर हैं, यह एक बार में केवल एक फ़ाइल को संसाधित करने की तुलना में लगभग n गुना तेज चलेगा।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।