一键注释host

需求驱动行动。由于测试需要,经常要配置host,修改配置hosts文件,一来找hosts文件的目录是件麻烦事,二来host多了,注释掉哪些,需要用哪些,就搞混了。不注释多余的host容易引起冲突和出错,比如下面的两个host就会出错:

10.240.19.27 www.cnblogs.com

10.240.19.28 www.cnblogs.com

我忘了哪个会生效,但是可能你希望生效的没有生效,导致出错。

思路很简单,就是注释未经注释的非空行,代码如下(comment_host.py):

 1 # -*- coding: utf-8 -*-
 2 
 3 import os
 4 import sys
 5 import shutil
 6 
 7 # global vars
 8 # host_path = sys.argv[1]
 9 host_path = r\'c:\windows\system32\drivers\etc\hosts\'
10 
11 copy = os.path.join(os.path.dirname(host_path), \'hosts_copy\')
12 if os.path.isfile(copy):
13     os.remove(copy)
14 
15 shutil.copy(host_path, copy)
16 
17 fr = open(copy, \'r\')
18 fw = open(host_path, \'w+\')
19 lines = fr.readlines()
20 
21 for each_line in lines:
22     if each_line.strip() == \'\':                # blank line
23         pass
24     elif each_line.strip()[0] == \'#\':        # a comment line already
25         pass
26     elif each_line.strip()[0] != \'#\':        # not a comment line
27         each_line = \'# \' + each_line
28     fw.write(each_line)
29 
30 fw.close()
31 fr.close()

处理这类文本文件、配置文件之类的,我特别注意空行,多余空格,tab等,生怕“阴沟里翻船”,有一个函数可以帮忙,就是strip(),strip的主要作用是去掉行首和行尾的指定字符。这里我要对付的是空白字符,包括换行符,空格、制表符等。注意,不是只有空格,而是所有空白字符,如:\t,\r,\n和\’ \’(空格)。

用strip()删除配置文件里多余空白字符十分有效,可以用下面的代码(simplify.py):

# -*- coding: utf-8 -*-

import os
import sys
import shutil

# global vars
# host_path = sys.argv[1]
host_path = r\'c:\windows\system32\drivers\etc\hosts\'

copy = os.path.join(os.path.dirname(host_path), \'hosts_copy\')
if os.path.isfile(copy):
    os.remove(copy)

shutil.copy(host_path, copy)

fr = open(copy, \'r\')
fw = open(host_path, \'w+\')
lines = fr.readlines()

for each_line in lines:
    each_line = each_line.strip()
    if each_line == "":
        continue
    fw.write(each_line)
    if each_line != lines[-1]:
        fw.write(\'\n\')

fw.close()
fr.close()

当然,文件名可以作为参数传入。这样,效果就是配置文件的内容紧缩了(见下图A和B),对于只需要程序去读的配置文件,避免出错的方法就是不给“空白”留机会。

 

 

 

(图A)

 

(图B)

版权声明:本文为perceiver原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/perceiver/p/3980480.html