猿问

创建python glob或列表,然后将文件从一个目录保存到另一个目录

我正在将文档从pdf转换为文本。pdf当前位于一个文件夹中,然后在txt转换后保存到另一个文件夹中。我有很多这样的文档,更喜欢迭代子文件夹并保存到txt文件夹中具有相同名称的子文件夹,但在添加该层时遇到问题。


我知道我可以使用glob以递归方式迭代,并对文件列表等执行此操作。但不清楚如何将文件从这个保存到新文件夹。这不是完全必要的,但会更方便和高效。


有没有一个好方法可以做到这一点?


import os

import io

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

from pdfminer.converter import TextConverter

from pdfminer.layout import LAParams

from pdfminer.pdfpage import PDFPage



def convert(fname, pages=None):

    if not pages:

        pagenums = set()

    else:

        pagenums = set(pages)


    output = io.StringIO()

    manager = PDFResourceManager()

    converter = TextConverter(manager, output, laparams=LAParams())

    interpreter = PDFPageInterpreter(manager, converter)


    infile = open(fname, 'rb')

    for page in PDFPage.get_pages(infile, pagenums):

        interpreter.process_page(page)

    infile.close()

    converter.close()

    text = output.getvalue()

    output.close

    return text 

    print(text)




def convertMultiple(pdfDir, txtDir):

    if pdfDir == "": pdfDir = os.getcwd() + "\\" #if no pdfDir passed in 

    for pdf in os.listdir(pdfDir): #iterate through pdfs in pdf directory

        fileExtension = pdf.split(".")[-1]

        if fileExtension == "pdf":

            pdfFilename = pdfDir + pdf 

            text = convert(pdfFilename)  

            textFilename = txtDir + pdf.split(".")[0] + ".txt"

            textFile = open(textFilename, "w")  

            textFile.write(text)  



pdfDir = r"C:/Users/Documents/pdf/"

txtDir = r"C:/Users/Documents/txt/"

convertMultiple(pdfDir, txtDir)   


狐的传说
浏览 123回答 1
1回答

MMTTMM

正如你所建议的,在这里工作得很好。它甚至可以仅过滤文件。glob.pdf测试后取消注释 3 行。import os, globdef convert_multiple(pdf_dir, txt_dir):    if pdf_dir == "": pdf_dir = os.getcwd() # If no pdf_dir passed in     for filepath in glob.iglob(f"{pdf_dir}/**/*.pdf", recursive=True):        text = convert(filepath)        root, _ = os.path.splitext(filepath) # Remove extension        txt_filepath = os.path.join(txt_dir, os.path.relpath(root, pdf_dir)) + ".txt"        txt_filepath = os.path.normpath(txt_filepath) # Not really necessary        print(txt_filepath)#        os.makedirs(os.path.dirname(txt_filepath), exist_ok=True)#        with open(txt_filepath, "wt") as f:#            f.write(text)pdf_dir = r"C:/Users/Documents/pdf/"txt_dir = r"C:/Users/Documents/txt/"convert_multiple(pdf_dir, txt_dir)   若要确定新文件的文件路径,请使用 os.path 模块中的函数。.txtos.path.relpath(filepath, pdf_dir)返回文件的文件路径,包括与 相关的任何子目录。pdf_dir假设是:filepathC:/Users/Documents/pdf/Setec Astronomy/employees.pdf并且是pdf_dirC:/Users/Documents/pdf/它将返回,然后可以将其传递给 ,从而为我们提供了包含额外子目录的完整文件路径。Setec Astronomy/employees.pdfos.path.join()txt_dir你可以这样做,但你必须确保所有相应的斜杠都在同一个方向上,并且没有额外/缺失的前导/尾随斜杠。txt_filepath = filepath.replace(filepath, pdf_dir)在打开新文件之前,需要创建任何和所有子目录。 调用以获取文件目录的文件路径,并将其参数设置为 ,以在目录已存在时禁止显示异常。.txtos.path.dirname()os.makedirs()exist_okTrueFileExistsError打开文件时使用语句以避免显式调用 ,特别是在出现任何异常的情况下。with.txt.close()
随时随地看视频慕课网APP

相关分类

Python
我要回答