Как проверить, содержит ли файл текст, который я хочу добавить? - PullRequest
0 голосов
/ 24 октября 2019

Я сейчас работаю над проектом. Поэтому я хочу прочитать все файлы * .pdf в каталоге, извлечь их текст и добавить его в текстовый файл. Все идет нормально. Я смог сделать это, да.

Теперь проблема: если я снова читаю тот же каталог, он снова добавляет те же файлы. Есть ли способ проверить, находится ли извлеченный текст в файле и, таким образом, пропустить все это?

Мой код для этого сейчас выглядит так (я уже создал переменную каталога):

`

for filename in os.listdir(directory):
    if filename.endswith(".pdf"):
        file = os.path.join(directory, filename)
        print(file)

        #parse data from file
        file_data = parser.from_file(file)

        #get files text content
        text = file_data['content']
        #print(type(text))
        print("len ", len(text))
        #print(text)

        #save to textfile
        f = open("test2.txt", "a+", encoding = 'utf-8')
        f.write(text)
        f.close()


    else:
        continue

`

Заранее спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Одна вещь, которую вы можете сделать, это загрузить содержимое файла и проверить, находится ли файл в файле:

if text in open("test2.txt"):
    # write here
else:
    # text is already in file, don't write

Однако это очень неэффективно. Лучше создать файл с уже написанными именами файлов и проверить, что:

(в начале вашего кода):

files = open("files.txt").readlines()

(до parser.from_file(file)):

if file in files:
   continue # don't read or write

(после f.close()):

files.append(file)

(после завершения всего цикла)

with open("files.txt", "w") as f:
    f.write("\n".join(files))

Собираем все вместе:

files = open("files.txt").readlines()

for filename in os.listdir(directory):
    if filename.endswith(".pdf"):
        file = os.path.join(directory, filename)
        if file in files:
            continue # don't read or write
        print(file)

        #parse data from file
        file_data = parser.from_file(file)

        #get files text content
        text = file_data['content']
        #print(type(text))
        print("len ", len(text))
        #print(text)

        #save to textfile
        f = open("test2.txt", "a+", encoding = 'utf-8')
        f.write(text)
        f.close()
        files.append(file)
    else:
        continue

with open("files.txt", "a+") as f:
    f.write("\n".join(files))

Обратите внимание, что вам нужно создать файл с именем files.txt в текущем каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...