2017-02-15 30 views
0

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

可能的重复[在Python中查找扩展名为.txt的目录中的所有文件](http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-in- python) –

+0

没有人这样说过。但希望你知道pdf的不是纯文本文件? – danidee

回答

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的在同一回路做到这一点,这样你循环,并使用操作系统的lib为了写每一个到一个txt文件有基名。

+0

Python还很新(2个月),我真的需要这个工作,它的工作就像一个魅力!非常感谢你!我将不得不阅读更多的os模块,因为我经常看到它的使用 – wra

+0

你好再次Omri。我试图用PPT交流要做到这一点,但它给了我下面的错误: 文本= textract.process(PPT) NameError:名字“PPT”没有定义 – wra

+0

@wra,您好,我还得看整个代码和分析它。我认为这是一个不同的问题,我会建议为此提出一个包括所有信息的新问题。 –

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”需要做的是向模式参数提供。

诚实地说,如果你知道你和你一起工作的目录和文件可以做得更容易,但看起来更像是矫枉过正,但这样做很简单。

基本上你提供在“目录”中的参数和文件夹路径中啪参数文件名

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产生的变量返回(临时)会从那里文件中包含的文本就像这样简单

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 

所以在这里它是非常直接的,以及提供包含要写入的文本的路径和变量。

相关问题