【问题标题】:Python replace string in loop for a text file [duplicate]Python在循环中替换文本文件的字符串[重复]
【发布时间】:2021-01-12 04:36:49
【问题描述】:

我一直在尝试使用 for 循环修改文本文件中的特定单词。我希望在 Fe.in 文件中更改的词是 >latt_par。我想为列表中的每个 vol 值创建一个文件。但是,我只是不断得到最后一个“3.05”。请问有什么方法可以指导我吗?我从 Python 开始。

这是我的代码

vols = [2.65, 2.85, 3.05] 
temp = [100,200,300]
for x in vols:
  f = open('Fe.in','r')
  filedata = f.read()
  f.close()
  newvol = filedata.replace("latt_par", str(x))
f = open('Fe_' + str(x) +'.in','w')
f.write(newvol)
f.close()

我还想替换文件 Fe.in 中的另一个字符串,我想在变量 temp 上运行它,但我没能做到。 非常感谢任何帮助!

【问题讨论】:

  • 您对文件的写入在您的循环之外,这意味着它在最后一次迭代之后运行一次。这将产生3.05 的文件名,因为这是您的最后一次迭代。
  • 我看到了我的错误,谢谢你告诉我!!

标签: python for-loop str-replace


【解决方案1】:
with open('Fe.in','r') as msg:
    data = msg.read()

for x in vols:
    wdata = data.replace("latt_par", str(x))

    with open('Fe_' + str(x) +'.in','w') as out_msg:
        out_msg.write(wdata)

就像你不需要打开你的模板N次,with方法允许不关闭文件没有问题。

【讨论】:

  • 你好@Synthase。谢谢你的时间。我试过这个但得到错误ValueError: I/O operation on closed file. 。它只创建 vols 中第一个值的文件,但是一个空文件
  • 对不起。我编辑了我的答案
  • 非常感谢!这次奏效了。如果您不介意,我还有一个简短的问题。我想对另一个变量进行另一个替换。我可以添加另一个 wdata2 变量吗?如何在同一个文件中打印?
  • 如果您想在同一个 wdata 消息中进行两次更改,只需执行以下操作:wdata = data.replace("latt_par", str(x)).replace("tmp", str(y))。如果这有帮助,请考虑接受答案;)(我的答案左上角的灰色勾号)
  • 哦,好的,我会试试的。谢谢,您的回复很有帮助!
猜你喜欢
  • 2019-03-17
  • 2020-10-08
  • 2013-04-05
  • 2017-03-12
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多