我正在将文档从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)
正如您所建议的,
glob
在这里工作得很好。它甚至只能过滤.pdf
个文件在测试后取消对这3行的注释
要确定新} 模块中的函数
.txt
文件的文件路径,请使用^{os.path.relpath(filepath, pdf_dir)
返回文件的文件路径,包括与pdf_dir
相关的任何子目录假设
filepath
是:C:/Users/Documents/pdf/Setec Astronomy/employees.pdf
而且{}是
C:/Users/Documents/pdf/
它将返回
Setec Astronomy/employees.pdf
,然后可以将它与txt_dir
一起传递到os.path.join()
,为我们提供包含额外子目录的完整文件路径您可以执行
txt_filepath = filepath.replace(filepath, pdf_dir)
,但必须确保所有相应的斜杠都在同一个方向上,并且没有额外的/缺少的前导/尾随斜杠在打开新的}以获取文件目录的文件路径,如果目录已经存在,则调用
.txt
文件之前,需要创建所有子目录^调用{os.makedirs()
并将其exist_ok
参数设置为True
,以抑制FileExistsError
异常在打开
.txt
文件时使用with
语句,以避免显式调用.close()
,特别是在出现任何异常的情况下相关问题 更多 >
编程相关推荐