在Python開發中,將常用功能封裝成為介面,並放入Utils工具類中,直接呼叫,可以提升效率。
常用的函式有:
- 資料夾遍歷
- 資料夾建立
- 檔案讀取
- 時間可讀
- 時間統計
- 安全除法
- 雙列表排序
- 配置讀取
- 指令碼路徑
- Numpy判空
資料夾遍歷
遍歷資料夾函式提供的功能和擴充套件,如下:
- 返回檔案的路徑和名稱;
- 根據字尾名篩選檔案;
- 去除隱藏檔案,即以“
.
”開頭的檔案;
實現:
def traverse_dir_files(root_dir, ext=None):
"""
列出資料夾中的檔案, 深度遍歷
:param root_dir: 根目錄
:param ext: 字尾名
:return: [檔案路徑列表, 檔名稱列表]
"""
names_list = []
paths_list = []
for parent, _, fileNames in os.walk(root_dir):
for name in fileNames:
if name.startswith('.'): # 去除隱藏檔案
continue
if ext: # 根據字尾名搜尋
if name.endswith(tuple(ext)):
names_list.append(name)
paths_list.append(os.path.join(parent, name))
else:
names_list.append(name)
paths_list.append(os.path.join(parent, name))
paths_list, names_list = sort_two_list(paths_list, names_list)
return paths_list, names_list
複製程式碼
資料夾建立
建立資料夾函式提供的功能和擴充套件,如下:
- 當資料夾不存在時,建立資料夾;
- 當資料夾存在時,根據引數,是否刪除資料夾;
實現:
def mkdir_if_not_exist(dir_name, is_delete=False):
"""
建立資料夾
:param dir_name: 資料夾
:param is_delete: 是否刪除
:return: 是否成功
"""
try:
if is_delete:
if os.path.exists(dir_name):
shutil.rmtree(dir_name)
print u'[INFO] 資料夾 "%s" 存在, 刪除資料夾.' % dir_name
if not os.path.exists(dir_name):
os.makedirs(dir_name)
print u'[INFO] 資料夾 "%s" 不存在, 建立資料夾.' % dir_name
return True
except Exception as e:
print '[Exception] %s' % e
return False
複製程式碼
檔案讀取
檔案讀取函式提供的功能和擴充套件,如下:
- 實現便捷地檔案讀取功能;
- 當引數mode是one時,讀取1行;
- 當引數mode是more時,讀取多行;
實現:
def read_file(data_file, mode='more'):
"""
讀檔案, 原檔案和資料檔案
:return: 單行或陣列
"""
try:
with open(data_file, 'r') as f:
if mode == 'one':
output = f.read()
return output
elif mode == 'more':
output = f.readlines()
return map(str.strip, output)
else:
return list()
except IOError:
return list()
複製程式碼
時間可讀
可讀時間函式提供的功能和擴充套件,如下:
- 輸入時間戳(如
time.time()
),輸出可讀時間str
; - 輸出格式是
年-月-日 時:分:秒
;
實現:
def timestamp_2_readable(time_stamp):
"""
時間戳轉換為可讀時間
:param time_stamp: 時間戳,當前時間:time.time()
:return: 可讀時間字串
"""
return datetime.fromtimestamp(time_stamp).strftime('%Y-%m-%d %H:%M:%S')
複製程式碼
時間統計
時間統計函式提供的功能和擴充套件,如下:
- 顯示起始和結束時間;
- 統計執行的
秒
數,可以用於統計單次耗時;
實現:
start_time = datetime.now() # 起始時間
print "[INFO] 當前時間: %s" % timestamp_2_readable(time.time())
time.sleep(10)
print "[INFO] 結束時間: %s" % timestamp_2_readable(time.time())
elapsed_time = (datetime.now() - start_time).total_seconds() # 終止時間
print "[INFO] 耗時: %s (秒)" % elapsed_time
複製程式碼
安全除法
安全除法函式提供的功能和擴充套件,如下:
- 基本的除法功能;
- 轉換為浮點數(float);
- 避免除數為0,當除數為0時,直接返回0.0;
實現:
def safe_div(x, y):
"""
安全除法
:param x: 被除數
:param y: 除數
:return: 結果
"""
x = float(x)
y = float(y)
if y == 0.0:
return 0.0
else:
return x / y
複製程式碼
雙列表排序
雙列表排序函式提供的功能和擴充套件,如下:
- 同時排序列表1和列表2;
- 兩個列表的對應順序不變;
實現:
def sort_two_list(list1, list2):
"""
排序兩個列表
:param list1: 列表1
:param list2: 列表2
:return: 排序後的兩個列表
"""
list1, list2 = (list(t) for t in zip(*sorted(zip(list1, list2))))
return list1, list2
複製程式碼
配置讀取
配置讀取函式提供的功能和擴充套件,如下:
- 配置檔案是JSON格式;
- 配置檔案轉換為配置類和配置字典。
實現:
import json
from bunch import Bunch
def get_config_from_json(json_file):
"""
將配置檔案轉換為配置類
:param json_file: json檔案
:return: 配置資訊
"""
with open(json_file, 'r') as config_file:
config_dict = json.load(config_file) # 配置字典
config = Bunch(config_dict) # 將配置字典轉換為類
return config, config_dict
複製程式碼
Numpy判空
- 空的NdArray可以用於異常處理;
- 當NdArray的屬性size值為0時,NdArray為空。
import numpy as np
a = np.array([])
print a.size # 0
複製程式碼
指令碼路徑
當執行Python指令碼時,路徑未包含當前工程,需要強制指定資料夾位置(dirname),否則無法找到同工程中的其他類。
以下是二層路徑的實現,當層次較多時,巢狀多次os.path.dirname
即可。
p = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if p not in sys.path:
sys.path.append(p)
複製程式碼
歡迎Follow我的GitHub:https://github.com/SpikeKing
By C. L. Wang
That's all! Enjoy it!