Цикл по файлам и закрытие после редактирования - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь сделать следующее: неопределенное количество текстовых файлов будет в папке, я хочу: 1. Открывать по одному файлу за раз, а затем 2. Прочитать текст в файле для определенного c строка, а затем 3. Добавьте все содержимое текстового файла в файл docx и сохраните как имя строки на шаге 2 4. Повторите для следующих текстовых файлов в папке

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

import docx
import os


design_doc = docx.Document("Configuration_V1.docx")
directory = r"C:\Configuration Files"
all_files = os.listdir(directory)
for config_file in all_files:
    with open(os.path.join(directory, config_file), "r") as f:
        config = f.read()
        design_doc.add_paragraph(config)
        target = "hostname"
        words = config.split()
        for i,w in enumerate(words):
            if w == target:
                hostname = words[i+1]
                design_doc.save(hostname + ".docx")
                f.close()

Чтобы уточнить, файлы docx создаются с собственными именами, поскольку строка в каждом текстовом файле всегда будет другой и читается, однако, когда я открываю каждый новый файл docx , весь текст скопирован из первого текстового файла. Содержимое каждого текстового файла должно быть добавлено к каждому docx.

Спасибо

1 Ответ

0 голосов
/ 17 июня 2020

Если вам нужен новый документ каждый раз, вам нужно каждый раз создавать новый. В противном случае вы просто добавляете новый абзац в тот же документ «в памяти» и сохраняете его под новым именем.

Думаю, вам нужно что-то вроде этого:

directory = r"C:\Configuration Files"
all_files = os.listdir(directory)
for config_file in all_files:
    with open(os.path.join(directory, config_file), "r") as f:
        config = f.read()
        design_doc = docx.Document("Configuration_V1.docx")
        design_doc.add_paragraph(config)
        target = "hostname"
        words = config.split()
        for i, w in enumerate(words):
            if w == target:
                hostname = words[i+1]
                design_doc.save(hostname + ".docx")
                f.close()
...