循环浏览文件,然后在编辑后关闭。

问题描述 投票:0回答:1

我想做以下事情:一个文件夹中会有数量不确定的文本文件,我想:1.一次打开一个文件,然后2.通过文件中的文本来读取一个特定的字符串,然后3.通过文件中的文本来读取一个特定的字符串。读取文件中的文本,寻找一个特定的字符串,然后3. 将文本文件的全部内容追加到docx文件中,并保存为步骤24中的字符串名称。对文件夹中的以下文本文件重复上述步骤。

我已经完成了所有这些工作,并认为我已经成功了,但当保存文件时,一切看起来都很好,但打开的第一个文本文件却被复制到其他所有创建的docx文件中,而不是每个文件都被复制并关闭。然而,当文件被保存时,一切看起来都很好,但打开的第一个文本文件会被复制到所有其他已创建的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中。

谢谢你的建议

python docx python-docx
1个回答
0
投票

如果你想每次都有一个新的文件,你需要每次都创建一个新的文件。否则你只是在同一个 "内存 "文档中添加一个新的段落,并将其保存为一个新的名称。

我想你要的是这样的东西。

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()
© www.soinside.com 2019 - 2024. All rights reserved.