2017-02-15 69 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 

所以在這裏它是非常直接的,以及提供包含要寫入的文本的路徑和變量。

相關問題