2013-05-17 2 views
-1

Вопрос: Как я могу прочитать во многих PDF-файлах по тому же пути, используя пакет Python «slate»?Python - Как преобразовать многие отдельные PDF-файлы в текст?

У меня есть папка с более чем 600 PDF-файлами.

Я знаю, как использовать пакет шифера для преобразования одиночных файлов PDF в текст, используя этот код:

migFiles = [filename for filename in os.listdir(path) 
if re.search(r'(.*\.pdf$)', filename) != None] 
with open(migFiles[0]) as f: 
    doc = slate.PDF(f) 

len(doc) 

Однако, это ограничивает Вас в один PDF в то время, заданный «migFiles [0]» - 0 - первый PDF-файл в файле пути.

Как я могу читать во многих PDF-файлах текст сразу, сохраняя их как отдельные строки или txt-файлы? Должен ли я использовать другой пакет? Как я могу создать цикл «for» для чтения во всех PDF-файлах в пути?

+0

Кто бы ни проголосовал, дайте ему повод ... –

ответ

0

Что вы можете сделать, это использовать простой цикл:

docs = [] 
for filename in migFiles: 
    with open(filename) as f: 
    docs.append(slate.pdf(f)) 
    # or instead of saving file to memory, just process it now 

Затем документы [я] будет содержать текст (я + 1) -го файла PDF, и вы можете делать все, что вы хотите с файлом, когда захотите. Кроме того, вы можете обрабатывать файл внутри цикла for.

Если вы хотите преобразовать в текст, вы можете сделать:

docs = [] 
separator = ' ' # The character you want to use to separate contents of 
# consecutive pages; if you want the contents of each pages to be separated 
# by a newline, use separator = '\n' 
for filename in migFiles: 
    with open(filename) as f: 
    docs.append(separator.join(slate.pdf(f))) # turn the pages into plain-text 

или

separator = ' ' 
for filename in migFiles: 
    with open(filename) as f: 
    txtfile = open(filename[:-4]+".txt",'w') 
    # if filename="abc.pdf", filename[:-4]="abc" 
    txtfile.write(separator.join(slate.pdf(f))) 
    txtfile.close() 
+0

Спасибо. Как только я добавил файлы PDF в «docs», вы знаете, как я могу преобразовать все PDF-файлы в текст или записать их в .txt, чтобы я мог их искать и анализировать? – EJS

0

Попробуйте эту версию:

import glob 
import os 

import slate 

for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")): 
    with open(pdf_file) as pdf: 
     txt_file = "{}.txt".format(os.path.splitext(pdf_file)[0]) 
     with open(txt_file,'w') as txt: 
      txt.write(slate.pdf(pdf)) 

Это создаст текстовый файл с то же имя, что и pdf в том же каталоге, что и файл pdf с преобразованным содержимым.

Или, если вы хотите сохранить содержимое - попробуйте эту версию; но имейте в виду, если переведенный содержание велико может исчерпать свой объем доступной памяти:

import glob 
import os 

import slate 

pdf_as_text = {} 

for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")): 
    with open(pdf_file) as pdf: 
     file_without_extension = os.path.splitext(pdf_file)[0] 
     pdf_as_text[file_without_extension] = slate.pdf(pdf) 

Теперь вы можете использовать pdf_as_text['somefile'], чтобы получить текстовое содержимое.

+0

Спасибо. Я попробовал этот код, однако я получил сообщение об ошибке: 'Traceback (самый последний вызов в прошлом):' ' Файл "", строка 1, в ' ' TypeError: 'модуль' объект не callable' Знаете ли вы, как решить проблему с модулем '' objet '' не для вызова 'для glob здесь? – EJS

+0

Ах, извините, его 'glob.glob' –

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

  • Нет связанных вопросов^_^