q989 发表于 2018-8-15 11:43:09

python核心编程第9章习题:9-7

# coding:utf-8  

  
import re
  

  
# 把文件读取进来, 每行存放到list, 不断增加list元素, 注释行忽略
  

  

  
def file_analyze(fname):
  
    line_list = list()
  
    with open(fname, 'r') as fd:
  
      for eachline in fd:
  
            if eachline.startswith('#'):
  
                continue
  
            line_list.append(eachline)
  
    return line_list
  

  

  
# 用一个dict存放解析结果, dict的每个元素是一个list, dict的每个key-value对是每行的解析结果
  
# 怎么区分每列呢?第一二列区分方法用空格
  
# 第四列用#分割出来就行
  
# 第三四列的区分方法是把每行去掉第四列后, 再去掉第一列和第二列
  
# 其中需要对第三列和第四列可能为空的情况做判断
  

  
# item就是文件的每行
  

  
def column_analyze(file_list):
  
    for item in file_list:
  
      line_analyze_list = list()
  
      service_name, tmp_port_protocol, port_protocol, aliases, comment = \
  
            str(), str(), str(), str(), str()
  
      if len(item.strip('\n').strip('\s')) == 0:
  
            continue
  
      for unit in re.split('//s+', item):
  
            service_name = unit.split()
  
            tmp_port_protocol = unit.split().strip()
  
            port_protocol = 'port_protocol = ' + unit.split().strip()
  
            line_analyze_list.append(port_protocol)
  
            tmp_aliases = unit.split('#').strip(service_name).lstrip().\
  
                strip(tmp_port_protocol)
  
            if len(tmp_aliases.strip()) == 0:
  
                aliases = 'aliases = '
  
            else:
  
                aliases = 'aliases = ' + unit.split('#').\
  
                  strip(service_name).\
  
                  lstrip().strip(tmp_port_protocol).strip()
  
            line_analyze_list.append(aliases)
  
            if unit.find('#') < 0:
  
                comment = 'comment = '
  
            else:
  
                comment = 'comment = ' + unit.split('#').strip().strip('\n')
  
            line_analyze_list.append(comment)
  
            analyze_dict = line_analyze_list
  
    return analyze_dict
  

  

  
def main(fname, listname):
  
    listname = file_analyze(fname)
  
    analyze_dict = column_analyze(listname)
  

  

  
if __name__ == '__main__':
  
    analyze_list = list()
  
    analyze_dict = dict()
  
    file_name = '/etc/services'
  
    main(file_name, analyze_list)
  
    print analyze_dict
页: [1]
查看完整版本: python核心编程第9章习题:9-7