Python3 配置文件(configparser)(轉載)

本文由 Luzhuo 編寫,轉發請保留該信息.?
原文:?http://blog.csdn.net/rozol/article/details/72793304

?

以下代碼以Python3.6.1為例?
Less is more!?
configparser 可以讀寫和解析注釋文件, 但是沒有寫入注釋的功能

  1 #!/usr/bin/env python
  2 # coding=utf-8
  3 __author__ = 'Luzhuo'
  4 __date__ = '2017/5/26'
  5 # config_configparser.py 配置文件
  6 # configparser 可以讀寫和解析注釋文件, 但是沒有寫入注釋的功能
  7 
  8 import configparser
  9 import re
 10 
 11 
 12 config_str = '''
 13 # 配置文件信息案例
 14 [DEFAULT]
 15 minSdkVersion = 15
 16 targetSdkVersion = 24
 17 versionName = 1.0.0
 18 server action = yes
 19 
 20 [luzhuo.me]
 21 user = luzhuo
 22 
 23 # This is a comments.
 24 [mysql]
 25 ip = 127.0.0.1
 26 port = 3306
 27 '''
 28 
 29 def config_write():
 30     '''
 31     生成配置文件, 字典的形式添加數據
 32     '''
 33 
 34     config = configparser.ConfigParser()
 35 
 36     config['DEFAULT'] = {'minSdkVersion': '15',
 37                          'targetSdkVersion': '24',
 38                          'versionName': '1.0.0',
 39                          'server action': 'yes'}
 40 
 41     config['luzhuo.me'] = {}
 42     config['luzhuo.me']['user'] = 'luzhuo'
 43 
 44     config['mysql'] = {}
 45     topsecret = config['mysql']
 46     topsecret['ip'] = '127.0.0.1'
 47     topsecret['port'] = '3306'
 48 
 49     with open('config.ini', 'w') as configfile:
 50         config.write(configfile)
 51 
 52 
 53 def config_read():
 54     '''
 55     解析配置文件
 56     '''
 57 
 58     # 讀取
 59     config = configparser.ConfigParser()
 60     config.read('config.ini')
 61 
 62     lists_header = config.sections()  # 配置組名, ['luzhuo.me', 'mysql'] # 不含'DEFAULT'
 63     print(lists_header)
 64 
 65     boolean = 'luzhuo.me' in config  # 配置組是否存在
 66     boolean = config.has_section("luzhuo.me")
 67     print(boolean)
 68 
 69     user = config['luzhuo.me']['user']
 70     print(user)
 71     mysql = config['mysql']
 72     mysql_ip = mysql['ip']
 73     mysql_port = mysql['port']
 74     print(mysql_ip, ":", mysql_port)
 75 
 76     for key in config['luzhuo.me']:  # 遍歷配置組的key, 與'DEFAULT'組的key
 77         print(key)
 78 
 79     # 刪除
 80     sec = config.remove_section("luzhuo.me")  # 刪除
 81     config.write(open("config.ini", "w"))  # 寫回去
 82 
 83     # 添加
 84     config.add_section("web.server")
 85     config.write(open("config.ini", "w"))
 86 
 87     # 修改/添加
 88     config.set("web.server", "http", "http://luzhuo.me")
 89     config.write(open("config.ini", "w"))
 90 
 91     # 刪除key
 92     config.remove_option("mysql", "ip")
 93     config.write(open("config.ini", "w"))
 94 
 95 
 96 def config_func():
 97     '''
 98     寫入的值均為字符串
 99     配合文件的節名稱區分大小寫, 鍵不區分大小寫(可任意縮進), 注釋用'#'和';'(用作整行前綴,可縮進,不推薦行內注釋), 值可以跨越多行(要縮進,慎用), 鍵值分隔符'='和':'
100     DEFAULT無法移除,試圖刪除將引發ValueError, clear()保持原樣, popitem()不返回
101     '''
102 
103     # --- ConfigParser 對象 ---
104     # 配置解析器, defaults:DEFAULT字典, dict_type:字典類型(默認:有序字典), allow_no_value:True是否接收不帶值的選項(值為None),(默認False), delimiters:鍵值分隔符, comment_prefixes:整行注釋符, inline_comment_prefixes:行內注釋符(值之后), strict:是否去重:True(默認), empty_lines_in_values:值是否可以多行;(默認True),False(行標記選項的結尾), default_section:默認節的名稱'DEFAULT', interpolation:插值, converters:轉換器{類型轉換器的名稱, 從字符串轉換所需數據的類型}{'dicimal': decimal.Decimal}
105     # class configparser.ConfigParser(defaults=None, dict_type=collections.OrderedDict, allow_no_value=False, delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation(), converters={})
106     config = configparser.ConfigParser()
107 
108     # items(raw=False, vars=None)  # 所有節(含DEFAULT) ItemsView(section_name, section_proxy)(可遍歷對象)
109     ItemsView = config.items()
110     dicts = config.defaults()  # DEFAULT字典
111     lists = config.sections()  # 可用的節列表(不含DEFAULT)
112     # has_section(section)  # 是否存在該節
113     boolean = config.has_section("mysql")
114     lists = config.options("mysql")  # 指定節的選項列表(含DEFAULT)
115     boolean = config.has_option("mysql", "ip")  # 是否存在指定節的選項
116 
117     # read(filenames, encoding=None)  # 嘗試讀取和解析文件名列表(不存在則忽略), 加載初始值調用read_file()要在read()之前調用
118     config.read("config.ini", encoding="utf-8-sig")  # windows下用記事本保存utf8格式要用utf-8-sig編碼集
119     # read_file(f, source=None)  # 從f讀取和解析配置數據, source:文件名
120     config.read_file(open('config.ini', encoding="utf-8-sig"))
121     # read_string(string, source='<string>')  # 從字符串解析配置數據
122     config.read_string(config_str)
123     # read_dict(dictionary, source='<dict>')  # 讀取字典
124     config.read_dict({'section1': {'key1': 'value1',
125                                    'key2': 'value2'},
126                       'section2': {'key3': 'value3',
127                                    'key4': 'value4'}
128     })
129 
130     # get(section, option, *, raw=False, vars=None[, fallback])  # 獲取指定節的選項值, fallback:為找到選項時的返回值
131     data_str = config.get("mysql", "ip", fallback=None)
132     # getint(section, option, *, raw=False, vars=None[, fallback])  #  獲取整數(選項的值強轉為整數)
133     data_int = config.getint("mysql", "port", fallback=-1)
134     # getfloat(section, option, *, raw=False, vars=None[, fallback])
135     data = float = config.getfloat("mysql", "port", fallback=-1)
136     # getboolean(section, option, *, raw=False, vars=None[, fallback])
137     data_bool = config.getboolean("DEFAULT", "server action", fallback=False)  # 獲取布爾值,不區分大小寫,識別'yes'/'no','on'/'off','true'/'false','1'/'0'
138 
139     # write(fileobject, space_around_delimiters=True)  # 將配置寫入文件, space_around_delimiters:是否用空格分隔鍵值之間
140     config.write(open("config.ini", "w", encoding="utf-8"))
141     # add_section(section)  # 添加節, 節重復DuplicateSectionError, 與默認節重復ValueError, 不是字符串TypeError
142     config.add_section("server.luzhuo.me")
143     # remove_section(section) # 刪除節, 存在True,不存在False
144     boolean = config.remove_section("server.luzhuo.me")
145     # set(section, option, value)  # 給指定的節設置值, 節不存在NoSectionError, option和value:選項和值為字符串,否則TypeError
146     config.set("server.luzhuo.me", "ip", "127.0.0.1")
147     # remove_option(section, option)  # 刪除選型, 不存在節NoSectionError, 選項存在True,不存在False
148     boolean = config.remove_option("server.luzhuo.me", "ip")
149 
150     # optionxform(option)  # 子類重寫該方法, 或 config.optionxform = str(str區分大小寫) 修改, 用于選項名稱轉為在內部結構中使用的實現
151 
152     configparser.MAX_INTERPOLATION_DEPTH  # 使用默認插值時,  當raw=false,get()遞歸插值的最大深度
153 
154     config.clear()  # 所有節都包含'DEFAULT'值,對節的清空不會刪除'DEFAULT'值
155     config.BOOLEAN_STATES.update({'enabled': True, 'disabled': False})  # 自定義boolean的判斷
156     config.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")  # 自定義節頭的編譯與解析的正則表達式(去除左右空格)
157 
158 
159 
160     # --- 異常 ---
161     try: pass
162     except configparser.Error: pass  # configparser異常的基類
163     except configparser.NoSectionError: pass  # 未找到指定節
164     except configparser.DuplicateSectionError: pass  # 節重復
165     except configparser.DuplicateOptionError: pass  # 選項重復
166     except configparser.NoOptionError: pass  # 未找到指定選項
167     except configparser.InterpolationError: pass  # 插值異常的基類
168     except configparser.InterpolationDepthError: pass  # 迭代次數超過MAX_INTERPOLATION_DEPTH
169     except configparser.InterpolationMissingOptionError: pass  # 選項不存在
170     except configparser.InterpolationSyntaxError: pass  # 替換源文本不符合語法
171     except configparser.MissingSectionHeaderError: pass  # 沒有節頭
172     except configparser.ParsingError: pass  # 解析文件錯誤
173 
174 
175 
176 if __name__ == "__main__":
177     config_write()
178     config_read()
179 
180     # config_func()

?

轉載于:https://www.cnblogs.com/dion-90/p/7978081.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

激光攝像機的原理及應用

近年來&#xff0c;在安防監控領域&#xff0c;以目前視頻監控技術的發展情況&#xff0c;室內監控和白天正常環境下的監控已不是難題&#xff0c;但社會環境的發展日新月異&#xff0c;城市的發展、森林資源的不斷流失、大型項目的建設、邊防安全的守護等&#xff0c;這些環境…

Object.defineProperty 詳解

最近想了解一下Vue是怎么實現數據雙向綁定的&#xff0c;了解到是基于Object.definProperty,在此記錄一下。 Object.defineProperty  顧名思義&#xff0c;就是給對象定義一個屬性&#xff0c;總共有這么幾種&#xff1a; value  屬性的值writable  是否可改寫&#xff0…

Java 實現排序

public class Sort {public static void main(String[] args) {int data[] {43,54,123,5,98,10,7,74,5,54};System.out.println("原先數組&#xff1a;");for(int d : data) {System.out.print(d " ");}System.out.println("\n");/*System.ou…

相機幀率和曝光時間的關系

文章轉載自&#xff1a;http://blog.163.com/pluto_918/blog/static/203853902012111255634175/ 工業相機參數之幀率相關知識詳解&#xff1a; 工業相機是機器視覺系統的重要組成部分之一&#xff0c;在機器視覺系統中有著非常重要的作用。工業相機已經被廣泛應用于工業生產線…

班長的選舉

/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" void main() {int zs,ls,ww,zl;//定義一個給參選人員的票數int max;//int xuhao;//char name[5];//參選人員的名字zslswwzl0;//初始票數都為0printf("候選人名單如下\n"…

jquery刷新頁面

window.location.reload()刷新當前頁面. parent.location.reload()刷新父親對象&#xff08;用于框架&#xff09; opener.location.reload()刷新父窗口對象&#xff08;用于單開窗口&#xff09; top.location.reload()刷新最頂端對象&#xff08;用于多開窗口&#xff09; 轉…

Python 常量

總結&#xff1a;在Python中實際中沒有嚴格的常量&#xff1b;知識程序員中約定俗成用變量名全部大寫代表常量 常量的定義&#xff1a; 常量即指不變的量&#xff0c;如pai 3.141592653..., 或在程序運行過程中不會改變的量 舉例&#xff0c;假如老男孩老師的年齡會變&#xff…

SlickOne 敏捷開發框架介紹(二) -- 多用戶/多租戶/SAAS軟件基礎框架實現

前言&#xff1a;在應用于集團版客戶或SAAS平臺服務的業務系統中&#xff0c;流程管理系統需要支持多用戶組織模型。其中包括角色數據、流程定義數據和流程實例數據的多用戶標識綁定。本文旨在全面描述如何基于SlickOne敏捷開發框架實現上述基礎服務功能&#xff0c;形成一個完…

工業相機行曝光與全局曝光

工業相機行曝光與全局曝光 逐行曝光&#xff1a; 圖1 逐行曝光模式 逐行曝光sensor 實現如圖1逐行曝光模式所示。與全局曝光不同&#xff0c;逐行曝光從第一行開始曝光&#xff0c;一個行周期之后第二行才開始曝光。依次類推&#xff0c;經過N-1 行后第N 行開始曝光。第一行曝光…

【Alpha階段匯總】成果展示與體驗總結

一、燃盡圖 二、軟件截圖 三、代碼與圖片、音樂素材倉庫 git倉庫 四、問題與總結 1.git提交問題 之前創建的倉庫地址是http://git.oschina.net/8265559926/groupnet14 但是無論怎么輸入都說找不到倉庫 經反復思考&#xff0c;感覺可能是因為地址不是純字母的原因。就重新注冊了…

Accusoft結構化工具包FormSuite for Structured Forms常見問題解答(二)

FormSuite for Structured Forms是結構化的表單處理SDK和字符識別工具套包&#xff0c;包括表單處理工具FormFix和字符識別工具SmartZone。所有表格處理控件被設計為可以通過內存到內存的數據傳輸模式進行相互溝通。本文收集了一些FormSuite for Structured Forms常見問題及解答…

構建之法閱讀筆記二

構建之法閱讀筆記之二&#xff08;4-11章節&#xff09; 在這之前我不注重代碼的規范性&#xff0c;也不是很注重代碼風格的規范&#xff0c;也沒有對自己寫的代碼進行審查的過程 根據書中所講的這樣寫即使是自己的能力很強&#xff0c;寫的代碼只有自己可以看懂&#xff0c;別…

SVAC國家標準介紹

[摘要] 標準給人的感覺既熟悉又陌生;說熟悉&#xff0c;每天都會聽到這個名詞;從食品衛生到高科技&#xff0c;好像都離不開;說陌生&#xff0c;標準的數量以萬計&#xff0c;包羅萬象&#xff0c;其內容和目標鮮為人知。以SVAC標準來說&#xff0c;粗看內容和H.264等標準和差不…

JDBC批量操作性能提升

JDBC當使用INSERT INTO....VALUES()語句批量插入的時候&#xff0c;應該使用JDBC的PreparedStatement的批量操作方法&#xff0c;而不是採用一條一條運行的方法。比如&#xff08;來源&#xff1a;http://superjavason.iteye.com/blog/255423&#xff09;&#xff1a;如上圖&am…

python學習筆記第9天《文件的管理辦法》

1&#xff0c;文件路徑&#xff1a; 絕對路徑&#xff1a;d:\programfiles\python3.exe 即從根目錄開始一直向下找到的文件 相對路徑&#xff1a;從當前文件路徑開始的路徑名稱2&#xff0c;編碼方式&#xff1a;utf-8,gbk,unicode等等 文件是用什么格式寫…

SVAC 2.0安全系統組成

SVAC2.0標準的一個很主要的特點就是視頻安全和加密認證相比SVAC1.0更加規范&#xff0c;在視頻安全方面更加重視。 通過信源層面的加密技術&#xff0c;實現端到端視頻數據加密&#xff0c;構建更強大、更完整的視頻安全體系。基于SVAC 2.0標準研究建立的安全系統&#xff08;…

【MySQL】(4)操作數據表中的記錄

1. 插入記錄INSERT 方法一&#xff1a; INSERT [INTO] tbl_name [(clo_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...; 比如&#xff1a; CREATE TABLE users( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password VA…

【技術知識】SVAC 2.0安全技術淺析

2017-09-26 08:52 加密可以有效保護數據的機密性&#xff0c;防止非授權訪問和非法監聽。簽名可以識別視音頻的產生源以及所對應的視音頻數據是否完整或被篡改。SVAC 2.0標準規定了加密和簽名接口及數據格式&#xff0c;支持對數據的安全保護&#xff0c;以統一的語法格式支持…

別再管你的API叫微服務了

你有沒有聽過這句名言&#xff1a;“計算機科學領域只有兩個難題&#xff0c;緩存失效和命名”&#xff1f;據說這句話是Phil Karlton在1996年或1997年左右說的。圍繞這句格言確實出現了很多帶有喜劇色彩的說法&#xff0c;它們也提到了其他的一些問題&#xff0c;但最近我對AP…

第一篇JavaScript基礎

1.什么是JavaScript 2.核心語法&#xff0c;變量 先聲明&#xff0c;再賦值 var i;i0; 同時聲明并賦值變量 var x,y,z0; 不聲明直接賦值u2&#xff08;變量可以不經過聲明直接賦值&#xff0c;但是容易出錯&#xff0c;這種方法不建議采納&#xff09;3. 3.核心語法&#xff0…