亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建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 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號