我有一个包含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)提前感谢!
发布于 2017-02-16 00:13:42
首先,在第一个循环中的每次迭代中都要覆盖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将每个pdf写入txt文件,以获得基本名称。
发布于 2017-02-16 00:22:10
所以我希望我对你的理解是正确的,如果我是的话,这应该会有所帮助。
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“参数将是temp返回的结果变量( _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因此,这里非常简单,提供路径和包含您想要编写的文本的变量。
https://stackoverflow.com/questions/42254418
复制相似问题