最近用python寫個工具,涉及到properties檔案的讀寫操作。發現python並沒有提供操作properties檔案的庫,只有乙個 configparser 類來支援 .ini 檔案的讀寫,這顯然不是我想要的,於是一番折騰後整出下面這個工具類:
###property.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import os
import tempfile
class properties:
def __init__(self, file_name):
self.file_name = file_name
self.properties = {}
try:
fopen = open(self.file_name, 'r')
for line in fopen:
line = line.strip()
if line.find('=') > 0 and not line.startswith('#'):
strs = line.split('=')
self.properties[strs[0].strip()] = strs[1].strip()
except exception, e:
raise e
else:
fopen.close()
def has_key(self, key):
return self.properties.has_key(key)
def get(self, key, default_value=''):
if self.properties.has_key(key):
return self.properties[key]
return default_value
def put(self, key, value):
self.properties[key] = value
replace_property(self.file_name, key + '=.*', key + '=' + value, true)
def parse(file_name):
return properties(file_name)
file = tempfile.temporaryfile() #建立臨時檔案
if os.path.exists(file_name):
r_open = open(file_name,'r')
pattern = re.compile(r'' + from_regex)
found = none
for line in r_open: #讀取原檔案
if pattern.search(line) and not line.strip().startswith('#'):
found = true
line = re.sub(from_regex, to_str, line)
file.write(line) #寫入臨時檔案
file.write('\n' + to_str)
r_open.close()
file.seek(0)
content = file.read() #讀取臨時檔案中的所有內容
if os.path.exists(file_name):
os.remove(file_name)
w_open = open(file_name,'w')
w_open.write(content) #將臨時檔案中的內容寫入原檔案
w_open.close()
file.close() #關閉臨時檔案,同時也會自動刪掉臨時檔案
else:
print "file %s not found" % file_name
###使用方式:
在要使用property工具的python檔案中匯入property.py檔案即可使用
示例(test.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import property
file_path = '/users/billy/desktop/bak/test.properties' #要操作的properties檔案的路徑
props = property.parse(file_path) #讀取檔案
props.put('key_a', 'value_a') #修改/新增key=value
print props.get('key_a') #根據key讀取value
print "props.has_key('key_a')=" + str(props.has_key('key_a')) #判斷是否包含該key1
測試效果:
注意,操作的目標檔案要存在,否則報錯:
###參考文件
python實用指令碼(1):讀取properties檔案
Python 今天抽空學習了 Property
1 property使方法像屬性一樣呼叫 property可以把乙個例項方法變成其同名屬性,以支援.號訪問,它亦可標記設定限制,加以規範 2 property成為屬性函式,可以對屬性賦值時做必要的檢查,比如在setter方法裡加過濾判斷條件。3 顯得相對簡潔一些,相比自定義的get和set方法,pr...
Uiautomator讀取properties檔案
1.建立assets資料夾 工程上右鍵new folder assets folder 2.在assets資料夾中建立prop檔案 在assets資料夾中右鍵new file,輸入名稱 prop 3.在prop檔案中新增引數,格式為 key value 如 time 100 name qq 4.封裝...
properties檔案與Properties類
當我們寫乙個簡單程式 例如圖書管理 快遞管理等 時,經常會有一些困擾,我們上一次錄入的物件資訊,下一次都不能儲存。在我們學習了檔案的io操作後,也許可以將這些資訊寫入檔案中,下一次執行程式時就可以載入資料。這些資訊的儲存有一些成熟的格式,比如說xml,json等,我們先來學習一下.propertie...