python常用模块
Posted Lucky&
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python常用模块相关的知识,希望对你有一定的参考价值。
python常用模块之一
time模块****
在Python中,通常有这几种方式来表示时间:
- 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
- 格式化的时间字符串 2018-05-20 19:45:04
元组(struct_time) : struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 18-5-19 下午3:26 # @Author : LK # @File : time_modular.py # @Software: PyCharm import time # 时间戳 计算 print(time.time()) # 从1970 年到现在有多少秒 # 结构化时间 # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19, # tm_hour=15, tm_min=32, tm_sec=0, tm_wday=5, tm_yday=139, tm_isdst=0) print(time.localtime()) t = time.localtime() print(t.tm_year) # 2018 # 结构化时间 转换成时间戳 看图 print(time.mktime(time.localtime(123213))) # 将结构化时间转换当成字符串时间 2018-05-19 15:40:38 print(time.strftime(\'%Y-%m-%d %X\',time.localtime())) # 将字符串时间装换成结构化时间 # time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19, # tm_hour=15, tm_min=40, tm_sec=38, tm_wday=5, tm_yday=139, tm_isdst=-1) print(time.strptime(\'2018:05:19:15:40:38\', "%Y:%m:%d:%X")) # Sat May 19 15:46:22 2018 print(time.asctime()) print(time.ctime()) import datetime # 2018-05-19 15:48:08.429398 print(datetime.datetime.now())
时间类型的相互转换
datetime模块****
可以用来做时间的计算
print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925 print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19 print(datetime.datetime.now() ) print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天 print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天 print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时 print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
random模块***
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 18-5-19 下午3:51 # @Author : LK # @File : 随机模块.py # @Software: PyCharm import random print(random.randint(0, 9)) # 0到9随机产生一个数 print(random.random()) # 0-1 float print(random.randrange(1, 3)) # [1, 3) print(chr(random.randint(65, 122))) # 产生一个随机字母 print(random.choice([1, \'23\', [4, 5]])) # 在这个列表里面随机选 print(random.sample([1, \'23\', [4, 5]], 2)) # 选择两个随机组合 # # 将a转换成ascii ord(\'a\') # print(ord(\'a\')) 翻过来chr(数字)
# 产生一个4位数字和字母的含有字母的验证码 res = \'\' for i in range(1,5): t = random.randint(0, 9) s = chr(random.randint(65,90)) s2 = chr(random.randint(97, 122)) res += str(random.choice([t,s, s2])) print(res)
os模块****
os是一个提供和系统交互的模块
# 字符串拼接尽量不用+ 用join, 因为+所占内存是+前和后的 import os os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径 print(os.getcwd()) 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 # 输出用于分割文件路径的字符串 win下为;,Linux下为: 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.join(path1[, path2[, ...]]) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间 os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间
import os path = os.path.abspath(__file__) path2 = os.path.dirname(__file__) path3 = os.path.dirname(os.path.abspath(__file__)) path4 = os.path.split(path3)[0] path5 = os.path.join(path4, "test/ogf", "inog") print(path) print(path2) print(path3) print(path4) print(path5) 结果: /home/lk/Desktop/py_project/chapt16/bin/python /home/lk/Desktop/pro_py/模块/model/os_modular.py /home/lk/Desktop/pro_py/模块/model/os_modular.py /home/lk/Desktop/pro_py/模块/model /home/lk/Desktop/pro_py/模块/model /home/lk/Desktop/pro_py/模块 /home/lk/Desktop/pro_py/模块/test/ogf/inog
# 在win下会把c:/windows\\\\system32\\\\ -->c:\\\\windows\\\\system32\\\\ os.path.normcase(\'c:/windows\\\\system32\\\\\') # \'c:\\\\windows\\\\system32\\\\\' # 规范化路径,如..和 / os.path.normpath(\'c://windows\\\\System32\\\\../Temp/\') #\'c:\\\\windows\\\\Temp\' # 在linux下会---->/ Users / jieli / test1 a = \'/Users/jieli/test1/\\\\\\a1/\\\\\\\\aa.py/../..\' print(os.path.normpath(a)) # / Users / jieli / test1
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys模块****
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
关于argv函数
直接看效果图
常用在 登录,就像mysql的登录 mysql -u root -p ..... 会把参数自动传给argv然后 在对argv操作,就不用让用户一步一步的输入了
# 进度条, import time for i in range(80): sys.stdout.write(\'#\') # print的底层实现就是利用的这个 time.sleep(0.1) sys.stdout.flush() # # sys.stdout.write(\'#\') 向屏幕输出内容, 但是要等到缓存完成后,一次性打印 # sys.stdout.flush() 刷新缓存, 就是如果有内容就输出
#=========知识储备========== #进度条的效果 [# ] [## ] [### ] [#### ] #指定宽度 print(\'[%-15s]\' %\'#\') print(\'[%-15s]\' %\'##\') print(\'[%-15s]\' %\'###\') print(\'[%-15s]\' %\'####\') #打印% print(\'%s%%\' %(100)) #第二个%号代表取消第一个%的特殊意义 #可传参来控制宽度 print(\'[%%-%ds]\' %50) #[%-50s] print((\'[%%-%ds]\' %50) %\'#\') print((\'[%%-%ds]\' %50) %\'##\') print((\'[%%-%ds]\' %50) %\'###\') #=========实现打印进度条函数========== import sys import time def progress(percent,width=50): if percent >= 1: percent=1 show_str=(\'[%%-%ds]\' %width) %(int(width*percent)*\'#\') print(\'\\r%s %d%%\' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end=\'\') #=========应用========== data_size=1025 recv_size=0 while recv_size < data_size: time.sleep(0.1) #模拟数据的传输延迟 recv_size+=1024 #每次收1024 percent=recv_size/data_size #接收的比例 progress(percent,width=70) #进度条的宽度70
json和pickle模块****
json和pickle类似,就连用法都很像,就是将数据类型转换成字符串存放起来,存到文件中
pickle的类型多一点,但是他存的格式是byte类型的,所以json比较常用
# dump/dumps是将数据转换成字符串,load/loads是将字符串转成数据类型 # pickle 和json类似,方法都一样, 就是pickle保存的数据是不是字符串而知字节, 所以读文件是用\'rb\', 写文件用\'wb\' # # pickle 支持的类型更多, 但是json更好用
# json 在其他语言也能用 import json dic = {\'name\' : \'luck\'} # 用json处理, --> 单引号变成双引号, 然后在最外面在加上"" data = json.dumps(dic) # data是一个字符串类型, json的 就是说是{"name": "luck"},双引号, 这样的话其他语言也可以使用 print(data) print(type(data)) # str # dic = {\'name\' : \'luck\'} ---> {"name": "luck"} ---> str({"name": "luck"}) # i = 8 ---> str(8) # s = \'hello\' --->"hello" --->str("hello") # l = [11,22] --->"[11,22]"
# 普通的向文件中读写数据时: # 如果向文件中存放一个字典, 将下面的字典放到文件中去 dic = {\'name\' : \'luck\'} str_d = str(dic) # 写文件 f_write = open(\'dic.txt\', \'w\') f_write.write(str_d) f_write.close() # 读文件 f_read = open(\'dic.txt\', \'r\') data = f_read.read() # z字符串 用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等 data = eval(data) print(data, type(data)) # {\'name\': \'luck\'} <class \'dict\'> f_read.close()
json读取文件,写文件,
# 普通的向文件中读写数据时: # 如果向文件中存放一个字典, 将下面的字典放到文件中去 dic = {\'name\' : \'luck\'} str_d = str(dic) # 写文件 f_write = open(\'dic.txt\', \'w\') f_write.write(str_d) f_write.close() # 读文件 f_read = open(\'dic.txt\', \'r\') data = f_read.read() # z字符串 用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等 data = eval(data) print(data, type(data)) # {\'name\': \'luck\'} <class \'dict\'> f_read.close() # 思路就是: 现将数据转换成字符串,然后在写入文件,读的时候就是把字符串读出来,然后转换成一定的格式 # dumps就相当于将数据转换成字符串, loads相当于将字符串读出来并转换成一定的格式 # 利用json实现 import json dic = {\'name\': \'lucky\'} f_write = open(\'new.txt\',\'w\') # 只需要将要写的数据传个dumps,返回一个字符串类型的数据 data = json.dumps(dic) # json.dump(dic, f_write) f_write.write(data) f_write.close() # 读数据 f_read = open(\'new.txt\', \'r\') data = json.loads(f_read.read()) # json.load(f_read) print(data) f_read.close()
以上是关于python常用模块的主要内容,如果未能解决你的问题,请参考以下文章