python核心編程第9章習題:9-7

來源:互聯網
上載者:User

標籤:python python核心編程 第九章習題


解析檔案. Win32 使用者: 建立一個用來解析 Windows .ini 檔案的程式. POSIX 使用者:建立一個解析 /etc/serves 檔案的程式. 其它平台使用者: 寫一個解析特定結構的系統設定檔的程式.


網上的例子多是解析 windows 的win.ini 的,這個相對簡單些。


這裡是解析/etc/services的,由於某些列(各列可以看做配置項)可能為空白,需要對怎麼取出各列和判斷可能為空白的列做些處理。


用dict儲存解析結果:

dict的每個key的名字就是該行的第一列(服務名),這個key的value就是該行其他元素組成的list,且list的每個元素以 配置項名稱  =  配置項值 的形式出現。


# coding:utf-8import 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()[0]            tmp_port_protocol = unit.split()[1].strip()            port_protocol = ‘port_protocol = ‘ + unit.split()[1].strip()            line_analyze_list.append(port_protocol)            tmp_aliases = unit.split(‘#‘)[0].strip(service_name).lstrip().                strip(tmp_port_protocol)            if len(tmp_aliases.strip()) == 0:                aliases = ‘aliases = ‘            else:                aliases = ‘aliases = ‘ + unit.split(‘#‘)[0].                    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(‘#‘)[1].strip().strip(‘\n‘)            line_analyze_list.append(comment)            analyze_dict[service_name] = line_analyze_list    return analyze_dictdef 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




本文出自 “linux與網路那些事” 部落格,請務必保留此出處http://khaozi.blog.51cto.com/952782/1896307

python核心編程第9章習題:9-7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.