【问题标题】:How to replace a string in every file in a directory如何替换目录中每个文件中的字符串
【发布时间】:2020-02-21 15:42:38
【问题描述】:

我正在尝试在特定文件夹中的每个文件(文件夹中的所有文件都是 xml)中将字符串:“XXXXXXXXXXX”替换为新字符串:“ILoveStackOverflow”。

我的代码如下:

import os, fnmatch

for filename in os.listdir("C:/Users/Francesco.Borri/Desktop/passivo GME"):
if filename.endswith('.xml'):
    with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename)) as f: 
        content = f.read()
        content = content.replace("XXXXXXXXXXX", "ILoveStackOverflow")
    with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), mode="w") as f: #Long Pierre-André answer
        f.write(content)

下一步是用一个每次增加的数字替换一个不同的字符串:“YYYY”。如果在我的目录中有 10 个文件,并且我设置了起始编号 1,则第一个文件“YYYY”将被替换为 1,第二个文件将被替换为 2,依此类推,直到 10。

【问题讨论】:

  • 首先上传 XML 文件的示例。指向应该被替换的元素。

标签: python xml string file replace


【解决方案1】:

你很接近。当您第二次打开文件时,您必须以可写模式打开它才能写入内容。

with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), 'w') as f:
    f.write(content)

一旦你解决了这个问题,我认为你问题的第二部分只是维护一个变量,你每次替换字符串时都会增加它的值。您可以手动完成(遍历字符串),或者在 for 循环中使用 replace 函数:

with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename)) as f:
        content = f.read()
for i in range(content.count("YYYY")):
    content.replace("YYYY", str(i), 1)  # or str(i+1)
with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), 'w') as f:
        f.write(content)

【讨论】:

  • 完美,成功了。我不是很清楚,但每个文件都有一个唯一的“YYYY”字符串。我只是使用一个索引来增加第一个周期的数字。现在一切都很完美
【解决方案2】:
with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), mode="w") as f:

您必须以写入模式打开文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多