【问题标题】:edit text file using Python使用 Python 编辑文本文件
【发布时间】:2023-04-04 05:14:01
【问题描述】:

每当我的 IP 地址发生变化时,我都需要更新一个文本文件,然后从 shell 运行一些命令。

  1. 创建变量 LASTKNOWN = "212.171.135.53"
    这是我们编写此脚本时的 IP 地址。

  2. 获取当前 IP 地址。每天都会变化。

  3. 为新 IP 创建变量 CURRENT。

  4. 比较(作为字符串)CURRENT 和 LASTKNOWN

  5. 如果相同,则退出()

  6. 如果它们不同,

    A.将包含 LASTKNOWN IP 地址的旧配置文件(/etc/ipf.conf)“复制”到 /tmp
    B. 将 /tmp/ipf.conf 文件中的 LASTKNOWN 替换为 CURRENT。
    C. 使用子进程“mv /tmp/ipf.conf /etc/ipf.conf”
    D. 使用子进程执行,“ipf -Fa -f /etc/ipf.conf”
    E. 使用子进程执行,“ipnat -CF -f /etc/ipnat.conf”

  7. 退出()

我知道如何执行第 1 步到第 6 步。我陷入了“文件编辑”部分,A -> C。我不知道要使用哪个模块或是否应该在适当的位置编辑文件。有很多方法可以做到这一点,我无法决定最好的方法。我想我想要最保守的。

我知道如何使用子流程,因此您无需对此发表评论。

我不想替换整行;只是一个特定的虚线四边形。

谢谢!

【问题讨论】:

  • “有很多方法可以做到这一点,我无法决定最好的方法。”由于您正在寻找一种最佳方式,而不仅仅是任何方式,也许最好多说一点约束:答案是否必须非常有效(内存或运行时间)等?
  • 不,它不需要超级高效。我正在编辑的文件很小。但也许将来我需要对一个 20MB 的 15,000 行的文本文件执行这种类型的操作。我猜你可以告诉我一个更有效的方法。
  • mv 命令(及其 python 等价物shutil.move())不能保证是原子的。最好将新版本放在同一个目录下(最简单的放在同一个逻辑驱动器上的方法),然后使用os.rename()调用进行原子重命名。

标签:
python
text
editing