如何将代码应用于目录中的多个文件以及在目录中输出具有相同文档名称的文件?

时间:2017-02-15 16:07:02

标签: python python-2.7 pdf text-files

我有一个带有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)

提前致谢!

2 个答案:

答案 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文件,以获得基本名称。