问题描述
我有一个包含pdf文件的目录,我想从中提取文本(每个文件分别),并将它们放入与原始pdf文件同名的单个.txt文件中。
示例:目录X包含“ name1.pdf”,“ name2.pdf”和“ name3.pdf”
我要做的是从这些文件中提取文本,并将其放入名为“ name1.txt”,“ name2.txt”和“ name3.txt”的文件中
到目前为止,我有:
import textract
import glob
for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
text = textract.process(pdf)
txtFile = open(...,'w') # confused here
txtFile.write(text)
提前致谢!
1楼
因此,我希望我能正确理解您,如果我愿意,这应该会有所帮助。
import fnmatch
import os
def walk_directories(self, Dir, pattern):
root = Dir
for root, directories, files in os.walk(Dir):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
_file_path = os.path.join(root, basename)
return _file_path
这样做是出于不同的目的,但它也应该满足您的需求,我打算在单个根目录中查找“未知”子目录中包含的文件。 您需要知道的是文件名和根目录(主文件夹),这也将与部分文件名一起使用,基本上,如果您拥有三个分别名为“ pdf1”,“ pdf2”和“ pdf3”的文件,要做的是将其提供给pattern参数。
老实说,如果您知道要使用的目录和文件可以轻松得多,那么这似乎有点过头了,但是这样做很简单。
本质上,您在“ Dir”参数中提供了文件夹路径,在Patter参数中提供了文件名。
walk_directories("C:\\Example folder", "Example File.pdf") # or simply "pdf1" etc..
您会注意到该函数返回一个变量,在这种情况下,该变量是您正在使用的文件的完整文件路径。
_path = walk_directories("C:\\example folder", "example file.pdf")
_path将包含
C:\\example folder\\example file.pdf
所以你可以像
def read(self, path):
try:
if os.path.isfile(path):
with open(path, 'r') as inFile:
temp = inFile.read()
except IOError as exception:
raise IOError('%s: %s' % (path, exception.strerror))
return temp
在这种情况下,“ path”参数将是_path,返回的结果变量(临时)将是文件中包含的文本,从那里开始,就像
def write(self, path, text):
try:
if os.path.isfile(path):
return None
else:
with open(path, 'w') as outFile:
outFile.write(text)
except IOError as exception:
raise IOError("%s: %s" % (path, exception.strerror))
return None
因此,这里也很简单,同时提供了路径和包含要编写文本的变量。
2楼
首先,在第一个循环中的每次迭代都覆盖text变量。
您可以使用os.path.basename(path)
来获取文件名。
基本上,您需要的是:
import os
for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
text = textract.process(pdf)
with open(os.path.basename(pdf)[:-4] + ".txt", "w") as f:
f.write(text)
您可以在同一循环中执行此操作,以这种方式循环遍历pdf,并使用os lib将每个文件写到txt文件中,以获得基本名称。