python替换文件行中的多个模式

标签 python file

这是最近两个小时里困扰我的一个问题。 我有一个包含多行的模板文件,在某些行中,某些单词必须由其他人更改。这是我的模板的样子:

subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }} {}

subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }}
{
option domain-name-servers {{ MY_DOMAIN_IP }}; 
option domain-name {{ MY_DOMAIN_NAME }}; 
option routers {{ MY_GATEWAY }}; 
option broadcast-address {{ MY_BROADCAST }};

这是我使用的代码:

f = open(DHCPD_PATH, 'w')
g = open(TEMPLATE_PATH, 'r')
patterns = { 
   '{{ MAC_ADDRESS }}'     : mac,
   '{{ IP_ADDRESS }}'      : ip, 
   '{{ MY_IP }}'           : MY_IP,
   '{{ MY_DOMAIN_IP }}'    : MY_DOMAIN_IP,
   '{{ MY_DOMAIN_NAME }}'  : MY_DOMAIN_NAME,
   '{{ MY_NETMASK }}'      : MY_NETMASK,
   '{{ MY_GATEWAY }}'      : MY_GATEWAY,
   '{{ MY_SUBNET }}'       : MY_SUBNET,
   '{{ MY_BROADCAST }}'    : MY_BROADCAST,
}   
content = g.read()
for i,j in patterns.iteritems():
   content = content.replace(i,j)
f.write(content)
f.close()
g.close()

这是我得到的文件:

subnet 192.168.10.0 netmask {{ MY_NETMASK }} {}

subnet 192.168.10.0 netmask 255.255.255.0
{
  option domain-name-servers 192.168.10.10;
  option domain-name "localnet.lan";
  option routers 192.168.10.1;
  option broadcast-address 192.168.10.255;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";
  next-server 192.168.10.3;

我不明白为什么这个 {{ MY_NETMASK }} 仍然存在,而其中一个已被正确替换,而其他所有模板模式也被正确替换。

任何人都可以给我一些提示吗?或者至少向我解释如何更正它?

非常感谢

最佳答案

@eumiro 猜对了:你的一个空间不是空间。

>>> repr('subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }} {}')
"'subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK\\xc2\\xa0}} {}'"
                                              ^^^^^^^^^^

看起来像一个不间断的空间。

关于python替换文件行中的多个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318340/

相关文章:

python - Python中的数组操作

python - Windows 上的 Docker-Cloud CLI 错误

file - 如何使用 RPGLE 在显示屏上显示消息文件中的消息?

检查段落的第一个字符是否为小写

python - 限制 xticks pandas 条形图中的字符

python - 使用 Python 在 Windows 上获取屏幕截图?

python - 在计数器数组中使用 "+="导致意外行为,Python

python - 如何在Python中打印文件中的单词

php - js如何将文件从一个文件夹复制到另一个文件夹

c++ - C++ 中的 getline() 函数不起作用