我想做以下事情:一个文件夹中会有数量不确定的文本文件,我想: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中。
谢谢你的建议
如果你想每次都有一个新的文件,你需要每次都创建一个新的文件。否则你只是在同一个 "内存 "文档中添加一个新的段落,并将其保存为一个新的名称。
我想你要的是这样的东西。
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()