为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2022-09-13 17:51:53
我正在将文档从pdf转换为文本。pdf当前位于一个文件夹中,然后在txt转换后保存到另一个文件夹中。我有很多这样的文档,更喜欢迭代子文件夹并保存到txt文件夹中具有相同名称的子文件夹,但在添加该层时遇到问题。我知道我可以使用glob以递归方式迭代,并对文件列表等执行此操作。但不清楚如何将文件从这个保存到新文件夹。这不是完全必要的,但会更方便和高效。有没有一个好方法可以做到这一点?import osimport iofrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom pdfminer.pdfpage import PDFPagedef 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)   
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

正如你所建议的,在这里工作得很好。它甚至可以仅过滤文件。glob.pdf


测试后取消注释 3 行。


import os, glob


def 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 模块中的函数。.txt


os.path.relpath(filepath, pdf_dir)返回文件的文件路径,包括与 相关的任何子目录。pdf_dir


假设是:filepath


C:/Users/Documents/pdf/Setec Astronomy/employees.pdf


并且是pdf_dir


C:/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()


查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号