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下cd
os.curdir 返回当前目录: (
'.'
)
os.pardir 获取当前目录的父目录字符串名:(
'..'
)
os.makedirs(
'dirname1/dirname2'
) 可生成多层递归目录
os.removedirs(
'dirname1'
) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(
'dirname'
) 生成单级目录;相当于shell中mkdir dirname
os.rmdir(
'dirname'
) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.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不存在,返回
False
os.path.isabs(path) 如果path是绝对路径,返回
True
os.path.isfile(path) 如果path是一个存在的文件,返回
True
。否则返回
False
os.path.isdir(path) 如果path是一个存在的目录,则返回
True
。否则返回
False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
2、获取字符串汉字的个数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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函数进行封装,根据不同类型显示不同颜色
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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、将数字星期转换为中文数字
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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输入的信息是否为空的公共检测函数,为空继续输入,不为空返回输入的信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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、生成一个指定范围值之内随机数,并对随机数进行判断
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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、中英文混合对齐
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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))