首页 > 解决方案 > 如何在 PYTHON 中打开文件并使用正则表达式修改其内容以查找/匹配/替换模式

问题描述

我有以下文件:

---
Proj: pgm1
Status: success
summary:  17 passed, 17 warnings in 18.73s
---
Proj: pgm2
Status: success
summary:  28 passed, 28 warnings in 5.16s
---
Proj: pgm3
Status: failed
summary:  1 failed, 63 passed, 32 warnings in 8.72s
---

而且我需要以写模式打开,逐行遍历,直到找到我要更改的行(即:pytest摘要:1失败,63通过,8.72s内出现32警告),然后将该行更改为读取“pytest 摘要:1 次失败,63 次通过,32 次警告在 8.72 秒内”,从而修改文件。此外,如果它发现一行已经采用正确的格式(即:pytest 摘要:28 次通过,28 次警告在 5.16 秒内)忽略它并继续寻找需要修改的行。

这是我修改行的正则表达式: re.sub(r"(\b\d+\.\d+)[a-z]", r"\1 seconds", file_name) #substitutes "8.13s" for "8.13 seconds"

我是 python 新手,不知道如何对文件进行修改。有人可以告诉我如何使用 file.read()/write() 来做到这一点吗?

我已经尝试过这段代码,但它根本不起作用:

with open(file_path, "r+") as file:
    # read the file contents
    file_contents = file.read()
    re.sub(r"(\b\d+\.\d+)[a-z]", r"\1 seconds", file_contents)  #substitutes 8.13s for 8.13 seconds
    file.seek(0)
    file.truncate()
    file.write(file_contents)

预期的输出(没有发生;文件保持不变,就像上面一样):

---
Proj: pgm1
Status: success
summary:  17 passed, 17 warnings in 18.73 seconds
---
Proj: pgm2
Status: success
summary:  28 passed, 28 warnings in 5.16 seconds
---
Proj: pgm3
Status: failed
summary:  1 failed, 63 passed, 32 warnings in 8.72 seconds
---

标签: pythonfilewritefile

解决方案


re.sub()返回更改后的字符串。file_contents 保持不变。

尝试:

with open(file_path, "r+") as file:
    # read the file contents
    file_contents = file.read()
    new_contents = re.sub(r"(\b\d+\.\d+)[a-z]", r"\1 seconds", file_contents)  #substitutes 8.13s for 8.13 seconds
    file.seek(0)
    file.truncate()
    file.write(new_contents)

推荐阅读