python常用小模塊使用匯總
在寫代碼過程中常用到一些好用的小模塊,現整理匯總一下:
1、獲取當前的文件名和目錄名,并添到系統環境變量中。
file = os.path.abspath(__file__) #獲取文件的絕對路徑
file_name = os.path.basename(file) #獲取文件名
file_dir = os.path.dirname(os.path.dirname(file)) #獲取文件的上一層目錄
os.path.join(file_dir, "logs")
sys.path.append(file_dir)
具體常用的os函數如下:
os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname") 改變當前腳本工作目錄;相當于shell下cdos.curdir 返回當前目錄: ('.')os.pardir 獲取當前目錄的父目錄字符串名:('..')os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄os.removedirs('dirname1') 若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推os.mkdir('dirname') 生成單級目錄;相當于shell中mkdir dirnameos.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir dirnameos.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印os.remove() 刪除一個文件os.rename("oldname","newname") 重命名文件/目錄os.stat('path/filename') 獲取文件/目錄信息os.sep 輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"os.pathsep 輸出用于分割文件路徑的字符串os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'os.system("bash command") 運行shell命令,直接顯示os.environ 獲取系統環境變量os.path.abspath(path) 返回path規范化的絕對路徑os.path.split(path) 將path分割成目錄和文件名二元組返回os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素os.path.basename(path) 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素os.path.exists(path) 如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path) 如果path是絕對路徑,返回Trueos.path.isfile(path) 如果path是一個存在的文件,返回True。否則返回Falseos.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回Falseos.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時間os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間2、獲取字符串漢字的個數
def get_chinese_num(uchar): i = 0 for utext in uchar: if u'\u4e00' <= utext <= u'\u9fa5': i += 1 return i str = "2015秋冬新款加絨保暖套頭衛衣 15541707 BC17灰花灰" a = get_chinese_num(str) b = len(str) print(a,b)
3、 對print函數進行封裝,根據不同類型顯示不同顏色
def show_message(msg, msgtype): """ 對print函數進行封裝,根據不同類型顯示不同顏色 :param msg: 顯示的消息體 :param msgtype: 消息類型 :return: 返回格式化過的內容 """ if msgtype == "NOTICE": show_msg = "\n\033[1;33m{0}\033[0m\n".format(msg) elif msgtype == "ERROR": show_msg = "\n\033[1;31m{0}\033[0m\n".format(msg) elif msgtype == "INFORMATION": show_msg = "\n\033[1;32m{0}\033[0m\n".format(msg) else: show_msg = "\n{0}\n".format(msg) print(show_msg)
4、根據時間生成一個不重復的流水號
import time
from datetime import datetime
serno = "{0}{1}".format(datetime.now().strftime("%Y%m%d%H%M%S"), str(int(time.time())))
print(serno)
5、將數字星期轉換為中文數字
def numtochr(num_of_weekday): """ 將數字星期轉換為中文數字 :param num_of_weekday: 星期幾的數字字符( 0,1,2,3,4,5,6) :return: 中文 星期幾 """ chrtuple = ('一', '二', '三', '四', '五', '六','日') num = int(num_of_weekday) return chrtuple[num]
6、判斷input輸入的信息是否為空的公共檢測函數,為空繼續輸入,不為空返回輸入的信息
def input_msg(message, limit_value=tuple()): """ 判斷input輸入的信息是否為空的公共檢測函數,為空繼續輸入,不為空返回輸入的信息 :param limit_value: 對輸入的值有限制,必須為limit_value的值;ex:("admin","user") :param message: input()函數的提示信息 :return: 返回輸入的信息 """ is_null_flag = True while is_null_flag: input_value = input(message).strip().lower() if not input_value: show_message("輸入不能為空!", "ERROR") continue elif len(limit_value) > 0: if input_value not in limit_value: show_message("輸入的值不正確,請重新輸入!", "ERROR") continue else: is_null_flag = False else: is_null_flag = False continue return input_value
實例說明:
choose = common.input_msg("選擇功能編號[1-5]: ", ("1", "2", "3", "4", "5")).strip()
7、對輸入的日期進行判斷是否正確 yyyy-mm-dd or yyyy-m-d
def input_date(msg, default_date): """ 對輸入的日期進行判斷是否正確 yyyy-mm-dd or yyyy-m-d :param msg:輸入提示信息 :param default_date: 默認日期 :return:返回日期 str類型 """ check_flag = False while not check_flag: strdate = input(msg).strip() if not strdate: strdate = default_date try: date_list = strdate.split("-") result = date(int(date_list[0]), int(date_list[1]), int(date_list[2])) check_flag = True except ValueError: show_message("輸入日期不合法,請重新輸入!", "ERROR") continue return result.strftime("%Y-%m-%d")
8、生成一個指定范圍值之內隨機數,并對隨機數進行判斷
def random_decide(random_num,cmp_value,cmp_mode='eq'): """ 生成一個指定范圍值之內隨機數,并對隨機數進行判斷 :param random_num:用來定義隨機數的范圍值 :param cmp_value:定義需要比對的值 :param cmp_flag:如果是gt或lt,則進行大于或小于判斷,如果是eq,則為等于判斷,默認為eq :return: 返回True或False """ ra = random.randrange(1,random_num) if cmp_mode == 'eq': express = "{0} == {1}" elif cmp_mode == 'gt': express = "{0} > {1}" elif cmp_mode == 'lt': express = "{0} < {1}" else: show_message('比較模式錯誤','ERROR') return False flag = eval(express.format(ra,cmp_value)) if flag: return True return False
9、中英文混合對齊
def myljust(str1, width, fillchar = None): ''' 中英文混合左對齊 :param str1: 欲對齊字符串 :param width: 寬度 :param fillchar: 填充字符串 :return: 新的經過左對齊處理的字符串對象 ''' if fillchar == None: fillchar = ' ' length = len(str1.encode('gb2312')) fill_char_size = width - length if width >= length else 0 return "%s%s" %(str1, fillchar * fill_char_size) def myrjust(str1, width, fillchar = None): ''' 中英文混合右對齊 :param str1: 欲對齊字符串 :param width: 寬度 :param fillchar: 填充字符串 :return: 新的經過右對齊處理的字符串對象 ''' if fillchar == None: fillchar = ' ' length = len(str1.encode('gb2312')) fill_char_size = width - length if width >= length else 0 return "%s%s" %(fillchar * fill_char_size, str1) def mycenter(str1, width, fillchar = None): ''' 中英文混合居中對齊 :param str1: 欲對齊字符串 :param width: 寬度 :param fillchar: 填充字符串 :return: 新的經過居中對齊處理的字符串對象 ''' if fillchar == None: fillchar = ' ' length = len(str1.encode('gb2312')) fill_char_size = width - length if width >= length else 0 if length%2 == 0: return "%s%s%s" %(fillchar * (fill_char_size //2), str1, fillchar* (fill_char_size // 2)) else: return "%s%s%s" %(fillchar * (fill_char_size //2 + 1), str1, fillchar* (fill_char_size // 2))
10、字典的排序
(1)、按照key來排序:
###方法一###
print("####################################")
for key in sorted(d.keys(),reverse = True):
print(key, d[key])
###方法二###
items = d.items()
print("####################################")
for key,value in sorted(items):
print(key, value)
###方法三###
print("####################################")
print(list(map(d.get,sorted(d.keys()))))
###方法四###
print("####################################")
items = sorted(d.items(),key=lambda d:d[0],reverse = True)
for key,value in items:
print(key, value)
這里的d.items()實際上是將d轉換為可迭代對象,迭代對象的方法將字典的元素轉化為了元組,而這里key參數對應的lambda表達式的意思則是選取元組中的第一個元素作為比較參數,也就是key值作為比較對象。
lambda x:y中x表示輸出參數,y表示lambda函數的返回值),所以采用這種方法可以對字典的value進行排序。
注意排序后的返回值是一個list,而原字典中的名值對被轉換為了list中的元組。
(2)、根據value排序:
###方法一###
print("####################################")
items = sorted(d.items(),key=lambda d:d[1],reverse = True)
for key,value in items:
print(key, value)
這里的d.items()實際上是將d轉換為可迭代對象,迭代對象的方法將字典的元素轉化為了元組,而這里key參數對應的lambda表達式的意思則是選取元組中的第二個元素作為比較參數,也就是value值作為比較對象。
lambda x:y中x表示輸出參數,y表示lambda函數的返回值),所以采用這種方法可以對字典的value進行排序。
注意排序后的返回值是一個list,而原字典中的名值對被轉換為了list中的元組。
###方法二###
print("####################################")
import operator
print(sorted(d.items(),key = operator.itemgetter(1),reverse = True))
浙公網安備 33010602011771號