我有一个带有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)
提前致谢!
答案 0 :(得分:2)
所以我希望我能正确地理解你,如果我这样,那应该有所帮助。
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",&#34 ; pdf2"," pdf3"您需要做的就是将它提供给模式参数。
诚实地说,如果你知道你和你一起工作的目录和文件可以做得更容易,那么这似乎有点矫枉过正,但是这很简单。
基本上你在" 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返回的结果变量(temp)将是文件中包含的文本,它就像那样简单
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
所以在这里它非常直接,也提供包含你想要写的文本的路径和变量。
答案 1 :(得分:0)
首先,第一个循环中的每次迭代都会覆盖文本变量..
您可以使用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文件,以获得基本名称。