我一直试图在 Python 中掌握多线程的窍门。然而,每当我试图让它做一些可能被认为有用的事情时,我就会遇到问题。
在这种情况下,我有 300 个 PDF 文件。为简单起见,我们假设每个 PDF 上只有一个唯一编号(例如 1 到 300)。我试图让 Python 打开文件,从中获取文本,然后使用该文本相应地重命名文件。
我制作的非多线程版本效果惊人。但它有点慢,我想我会看看是否可以加快速度。然而,这个版本找到了第一个文件,正确地重命名它,然后抛出一个错误说:
FileNotFoundError: [Errno 2] No such file or directory: './pdfPages/1006941.pdf'
它基本上告诉我它找不到该名称的文件。它不能的原因是因为它已经命名了它。在我的脑海中,这告诉我我可能已经在这个循环和/或多线程中搞砸了。
任何帮助,将不胜感激。
来源:
import PyPDF2
import os
from os import listdir
from os.path import isfile, join
from PyPDF2 import PdfFileWriter, PdfFileReader
from multiprocessing.dummy import Pool as ThreadPool
# Global
i=0
def readPDF(allFiles):
print(allFiles)
global i
while i < l:
i+=1
pdf_file = open(path+allFiles, 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
pdf_file.close()
Text = str(page_content.encode('utf-8')).strip("b").strip("'")
os.rename(path+allFiles,path+pre+"-"+Text+".PDF")
pre = "77"
path = "./pdfPages/"
included_extensions = ['pdf','PDF']
allFiles = [f for f in listdir(path) if any(f.endswith(ext) for ext in included_extensions)] # Get all files in current directory
l = len(allFiles)
pool = ThreadPool(4)
doThings = pool.map(readPDF, allFiles)
pool.close()
pool.join()
相关分类