2017-02-15 5 views
0

У меня есть каталог с файлами в формате pdf, который я хочу извлечь из (каждый файл отдельно) и поместить в отдельные файлы .txt с тем же именем, что и исходный файл pdf.Как я могу применить код к нескольким файлам в каталоге, а также к выходным файлам с одинаковыми именами документов в каталоге?

Пример: Каталог 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

Возможный дубликат [Найти все файлы в каталоге с расширением .txt в Python] (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 для того, чтобы имеют базовое имя.

+0

Еще очень новый для python (2 месяца), и я действительно нуждался в этом для работы, и он работал как шарм! Большое спасибо! Мне нужно будет больше узнать о модуле os, поскольку я вижу, что его очень часто используют. – wra

+0

Привет, снова Omri. Я попытался сделать это с помощью PowerPoints, но это дает мне следующую ошибку: text = textract.process (ppt) NameError: name '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», все, что вы необходимо выполнить поставку этого параметра.

Честно говоря, это похоже на перебор, если вы знаете, что каталоги и файлы, с которыми вы работаете, могли бы сделать это намного проще, но с этим это довольно прямолинейно.

По существу вы указываете путь к папке в «Dir» Параметр и имя файла в параметре скороговоркой

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 

так что это довольно прямолинейно, а также укажите путь и переменную, содержащую текст, который вы хотите написать.

Смежные вопросы