python glob或listdir创建文件,然后将文件从一个目录保存到另一个目录
我正在将文档从pdf转换为文本。PDF当前位于一个文件夹中,然后在txt转换后保存到另一个文件夹中。我有很多这样的文档,我更喜欢在子文件夹上迭代并保存到txt文件夹中同名的子文件夹中,但添加该层时遇到问题 我知道我可以使用glob递归地进行迭代,并对文件列表等执行此操作,但不清楚如何将文件从此文件夹保存到新文件夹。这不是完全必要的,但会更加方便和高效 有什么好办法吗python glob或listdir创建文件,然后将文件从一个目录保存到另一个目录,python,directory,glob,listdir,Python,Directory,Glob,Listdir,我正在将文档从pdf转换为文本。PDF当前位于一个文件夹中,然后在txt转换后保存到另一个文件夹中。我有很多这样的文档,我更喜欢在子文件夹上迭代并保存到txt文件夹中同名的子文件夹中,但添加该层时遇到问题 我知道我可以使用glob递归地进行迭代,并对文件列表等执行此操作,但不清楚如何将文件从此文件夹保存到新文件夹。这不是完全必要的,但会更加方便和高效 有什么好办法吗 import os import io from pdfminer.pdfinterp import PDFResourceMan
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行的注释
导入操作系统,全局
def convert_multiple(pdf_目录、txt_目录):
如果pdf_dir==“”:pdf_dir=os.getcwd()#如果没有传入pdf_dir
对于glob.iglob(f“{pdf_dir}/***.pdf”,recursive=True)中的文件路径:
text=convert(文件路径)
根目录,z=os.path.splitext(filepath)#删除扩展名
txt_filepath=os.path.join(txt_dir,os.path.relpath(root,pdf_dir))+“.txt”
txt_filepath=os.path.normpath(txt_filepath)#实际上不需要
打印(txt_文件路径)
#os.makedirs(os.path.dirname(txt\u filepath),exist\u ok=True)
#打开(txt_文件路径,“wt”)作为f:
#f.书写(文本)
pdf_dir=r“C:/Users/Documents/pdf/”
txt_dir=r“C:/Users/Documents/txt/”
转换多个(pdf目录、txt目录)
要确定新.txt
文件的文件路径,请使用模块中的函数
os.path.relpath(filepath,pdf\u dir)
返回文件的文件路径,包括相对于pdf\u dir的任何子目录
假设filepath
为:
C:/Users/Documents/pdf/Setec Astronomy/employees.pdf
而
pdf_dir
C:/Users/Documents/pdf/
它将返回Setec Astronomy/employees.pdf
,然后将其与txt\u dir
一起传递到os.path.join()
,为我们提供包含额外子目录的完整文件路径
您可以执行txt\u filepath=filepath.replace(filepath,pdf\u dir)
,但必须确保所有对应的斜杠都在同一方向,并且没有额外的/缺少的前导/尾随斜杠
在打开新的.txt
文件之前,需要创建所有子目录<调用code>os.path.dirname()获取文件目录的文件路径,如果目录已经存在,则调用os.makedirs()
并将其exist\u ok
参数设置为True
,以抑制fileexisterror
异常
打开
.txt
文件时使用with
语句,以避免显式调用.close()
,尤其是在出现任何异常的情况下。因此,如果在子目录(例如C:/Users/Documents/pdf/Setec Astronomy/employees.pdf
)中找到pdf,您想将文本文件保存到C:/Users/Documents/txt/Setec Astronomy/employees.pdf
还是C:/Users/Documents/txt/employees.pdf
?@GordonAitchJay第一个文本文件是C:/Users/Documents/txt/Setec Astronomy/employees.txt,程序负责文本部分