#python-3.x
#python-3.x
Вопрос:
Я пробую следующий код, но он преобразует только последний PDF-файл в папке:
import fitz # this is pymupdf
import glob, os
os.chdir('C:/Users/XXXXXXX')
pdfs = []
for file in glob.glob("*.pdf"):
with fitz.open(file) as doc:
text = ""
for page in doc:
text = page.getText()
textfile = open('textfile.txt', 'w',encoding="utf-8")
textfile.write(text)
вы можете мне помочь ?!?!?!?!
я использую python 3.8!
Комментарии:
1. Ну, вы инициализируете
text = ""
с каждой итерацией…
Ответ №1:
Если проблема в том, что ваш цикл не работает (а это, вероятно, так и есть), вы можете использовать os.walk("start_dir")
его вместо этого. Например:
for path, dirs, files in os.walk('.'): # All files.
for file in files: # Loop through each file.
with fitz.open(file) as doc: # Open file.
...
Комментарии:
1. спасибо за ответ!!! он просматривает папку и преобразует PDF файлы объединяя содержимое в один текстовый файл (textfile.txt ). мне нужно столько файлов txt, сколько файлов PDF (возможно, с тем же именем)
2. Да, вам придется сохранять текст после каждого документа, поэтому, если вы поместите свой код для сохранения файла в
for
цикл, это должно сработать.
Ответ №2:
Вам нужно указать getText
, что нужно получить. Затем добавьте этот текст в список вне цикла, чтобы он не перезаписывался. Наконец, преобразуйте этот список в строку.
Редактировать: я изменил свой первоначальный ответ, чтобы сделать то, что вы просили. Для того, чтобы записать их в отдельные .txt
файлы, вы должны включить запись файла в цикл. Не забудьте закрыть textfile
перед переходом к следующему PDF-файлу, иначе следующий файл не будет записан.
import fitz
import glob, os
DIR = '\pdftext\'
os.chdir(DIR 'pdf\')
def listToString(s):
str1 = ""
for ele in s:
str1 = ele
return str1
for file in glob.glob("*.pdf"):
print(file)
filename = os.path.splitext(file)
filename = filename[0]
pdfs = []
with fitz.open(file) as doc:
text = ""
for page in doc:
text = page.getText(text)
pdfs.append(text)
textfile = open(DIR 'text\' filename '.txt', 'w',encoding="utf-8")
pages = listToString(pdfs)
textfile.write(pages)
textfile.close()
Комментарии:
1. спасибо за ответ!!! он проходит через папку и преобразует PDF-файлы, объединяя содержимое в один текстовый формат (textfile.txt ). мне нужно столько файлов txt, сколько файлов PDF (возможно, с тем же именем)
Ответ №3:
я пытался:
import sys, fitz
import glob
for fname in glob.glob("C:/Users/XXXXXX/*.pdf"):
doc = fitz.open(fname) # open document
out = open(fname ".txt", "wb") # open text output
for page in doc: # iterate the document pages
text = page.getText().encode("utf8") # get plain text (is in UTF-8)
out.write(text) # write text of page
out.write(bytes((12,))) # write page delimiter (form feed 0x0C)
out.close()
это работает, но мне все еще нужно проверить результат 🙂