Python 多线程问题文件操作

我一直试图在 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()


慕盖茨4494581
浏览 174回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python