python 内置模块 优先级_Python之路(九):模块之常用内置模块

模块

模块,用一砣代码实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块。//一个库包括一个至多个模块,至少一个

模块分为三种:

自定义模块

内置模块

开源模块

内置模块

一、time & datetime模块

时间相关的操作,时间有三种表示方式:

时间戳 :1970年1月1日之后的秒,即:time.time()

格式化的字符串 :2014-11-11 11:11, 即:time.strftime('%Y-%m-%d')

结构化时间 :元组包含了:年、日、星期等... time.struct_time 即:time.localtime()

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importtime#1、time.sleep() :停止n秒

print("等5秒")

time.sleep(5)print("5秒结束")#2、time.time() :返回当前系统的时间戳,1970年1月1日之后d到现在的秒数

ret =time.time()print(ret)#输出:1500989660.9683125

#3、time.ctime() :返回当前日期的字符串格式

print(time.ctime())#输出:Tue Jul 25 21:37:43 2017

#4、time.ctime(time.time()-86400) :返回前一天当前的时间

print(time.ctime(time.time()-86400))#输出:Mon Jul 24 21:40:50 2017

#5、time.gmtime(time.time()-86400) :返回前一天当前utc时间的struc时间对象格式//无参数时,当前的struct_time的时间

print(time.gmtime(time.time()-86400))#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=14, tm_min=10, tm_sec=57, tm_wday=0, tm_yday=205, tm_isdst=0)

time_obj = time.gmtime(time.time()-86400)print(time_obj)#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=14, tm_min=10, tm_sec=57, tm_wday=0, tm_yday=205, tm_isdst=0)

#time结构对象,可以随意取里面的值进行拼接,注意,这里面的值全是int型

print(time_obj.tm_year)#输出:2017

print(str(time_obj.tm_year) + "-" + str(time_obj.tm_mon) + "-" +str(time_obj.tm_mday))#输出:2017-7-25

print("%s-%s-%s"%(time_obj.tm_year,time_obj.tm_mon,time_obj.tm_mday))#输出:2017-7-25

print("%s-%s-%s %s:%s"%(time_obj.tm_year,time_obj.tm_mon,time_obj.tm_mday,time_obj.tm_hour,time_obj.tm_min))#输出:2017-7-24 14:10 UTC时间,东八区,差八个小时

#6、time.localtime() :返回本地时间 的struct time对象格式

print(time.localtime())#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=25, tm_hour=22, tm_min=7, tm_sec=49, tm_wday=1, tm_yday=206, tm_isdst=0)

print(time.localtime(time.time()-86400))#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=22, tm_min=7, tm_sec=49, tm_wday=1, tm_yday=206, tm_isdst=0)

#7、time.mktime(time.localtime()) :将struct_time格式转回时间戳格式

time_obj =time.localtime()print(time.mktime(time_obj))#输出:1500992261.0

#8、time.strftime() :将struct_time格式转成指定的字符串格式

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))#输出:2017-07-25 22:24:30

#9、time.strptime() :将字符串格式转换成struct_time格式

print(time.strptime("2017-07-25","%Y-%m-%d"))#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=206, tm_isdst=-1)

#前后要对应,对应的连接符号也要相同

time_obj = time.strptime("2017-07-25 22:24:30","%Y-%m-%d %H:%M:%S")print(time_obj)#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=25, tm_hour=22, tm_min=24, tm_sec=30, tm_wday=1, tm_yday=206, tm_isdst=-1)

#10、time.asctime() ::返回当前日期的字符串格式,与 time.ctime()输出相同

print(time.asctime())print(time.asctime(time.localtime()))#两个输出相同:Tue Jul 25 22:36:32 2017

time

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importtimeimportdatetime#1、datetime.date.today() :输出当前字符串日期

print(datetime.date.today())#输出:2017-07-25

#2、datetime.date.fromtimestamp(time.time()) :时间戳直接转成日期格式

print(datetime.date.fromtimestamp(time.time()))#输出:2017-07-25

print(datetime.date.fromtimestamp(time.time()-86400))#输出:2017-07-24

#3、datetime.datetime.now() :当前时间

print(datetime.datetime.now())#输出:2017-07-25 22:44:53.979426

current_time=datetime.datetime.now()#4、datetime.datetime.now().timetuple() :输出时间对象,返回struct_time格式

print(current_time.timetuple())#输出:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=25, tm_hour=22, tm_min=48, tm_sec=33, tm_wday=1, tm_yday=206, tm_isdst=-1)

#5、datetime.datetime.now().replace(年,月,日) :返回当前时间,但指定的值会被替换

print(current_time)#输出:2017-07-25 22:54:02.178782

print(current_time.replace(1990,6,25))#输出:1990-06-25 22:54:02.178782

#参数可以是:(年)、(年,月)、(年、月、日)

#5.1、datetime.datetime.now().replace() :通过参数修改时间,可以只修改几个,也可以全部修改

print(current_time)print(current_time.replace(year=2000, month=10, day=12, minute=3, hour=2, second=30))'''2017-07-25 23:22:07.510177

2000-10-12 02:03:30.510177'''

#6、datetime.datetime.strptime() :将字符串转成日期格式

str_to_date = datetime.datetime.strptime("21/11/06 16:30","%d/%m/%y %H:%M")print(str_to_date)#输出:2006-11-21 16:30:00 %y:两位制的年

#7、时间加减

print(datetime.datetime.now() + datetime.timedelta(days=3)) #当前时间+3天

#print(datetime.datetime.now() + datetime.timedelta(3))

print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天

print(datetime.datetime.now() + datetime.timedelta(weeks=3)) #当前时间+3周

print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时

print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

print(datetime.datetime.now() + datetime.timedelta(seconds=30)) #当前时间+30秒

print(datetime.datetime.now()) #当前时间

'''2017-07-28 23:13:03.168042

2017-07-22 23:13:03.194044

2017-08-15 23:13:03.202044

2017-07-26 02:13:03.208045

2017-07-25 23:43:03.214045

2017-07-25 23:13:33.219045

2017-07-25 23:13:03.226046

#当前时间:2017-07-25 23:13:03.226046

#注意:天的变换直接加数字也可以'''

datetime

0f776e74ec65bd7466e9f8e3486cb6e8.png

2b3fddf6a6ed3b97d599b509075d70bd.png

二、sys模块

sys.argv 命令行参数List,第一个元素是程序本身路径

sys.exit(n) 退出程序,正常退出时exit(0)

sys.version 获取Python解释程序的版本信息

sys.maxint 最大的Int值

sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.platform 返回操作系统平台名称

sys.stdout.write('please:')

val= sys.stdin.readline()[:-1]

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importsys#1、sys.argv :命令行参数List,第一个元素是程序本身路径

print(sys.argv)if sys.argv[1] == "abc":print("哈哈")else:print("嘿嘿")#python a..py abc

#2、sys.path :返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

print(sys.path)#输出:['C:\\Users\\Administrator\\Desktop',

#'F:\\python3.6\\python36.zip',

#'F:\\python3.6\\DLLs',

#'F:\\python3.6\\lib',

#'F:\\python3.6',

#'F:\\python3.6\\lib\\site-packages']

#输出的是个路径列表:当前所在程序路径、上一级、以及Python相关的东东、还有个site-packages

#site-packages:存放所有第三方安装的模块,全局都可以用(任何地方)

#3、sys.exit(n) :退出程序,正常退出时exit(0)

choice = input("wanna quit?")if choice == 'y' or choice == 'Y':

exit("good bye !!!")#sys.exit("good bye !!!")

#与exit()效果相同

#4、sys.version :获取Python解释程序的版本信息

print(sys.version)#输出:3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]

#5、sys.platform :返回操作系统平台名称

#可用于收集硬件信息

print(sys.platform)#输出:win32

#6、sys.stdout.write() :输出到屏幕(可用于输出动态进度条)

importtimefor i in range(100):

sys.stdout.write('#')

time.sleep(0.3)#7、sys.stdin.readline() :读取屏幕的输入(input也是调用这个)

sys

练习:1、读写用户的输入,根据用户的输入,创建一个相应的目录

importosimportsys

os.mkdir(sys.argv[1])#Python test.py newdir#test为文件名,newdir是新建的文件夹名

2、自己写一个脚本,可以在任何路径导入

#写一个脚本,将其放在Python安装目录下的\lib\site-packages目录下即可

3、进度条,带百分比

importsysimporttimefor i in range(11):

sys.stdout.write('\r\r')

sys.stdout.write("%s%% |%s\n"%(int(i/10*100),int(i/10*100)*'*'))

sys.stdout.flush()

time.sleep(0.1)

三、json 和 pickle模块

用于序列化的两个模块

json  :用于字符串 和 python数据类型间进行转换

pickle  :用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

************************************************************************************************************************

pickle

************************************************************************************************************************

pickle支持的可序列化的有:任何数据类型,包括面向对象的对象

案例背景:未涉及到数据库,此外,例如京东登录,金钱信息、购买记录信息等存在文本中。

此文件中:一行:用户名,密码,目的地,手机号,余额,邮箱

购买后,将余额修改掉,就要找到修改的那一行,但是实际上你要修改的的字节数要和之前的一样,前后不一样的数据字节会出错,差异的字符或字节会影响到数据

所以必须要把所有的数据重新写进去。

解决:用字典的形式存取修改,k为账号ID,值为email、用户名、密码、余额、电话等等

注意:文件里面只能存储字符串格式或二进制数据,不能存任何的其他的数据类型,如数字,浮点,字典,列表,元组等都不能存

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

###########################################################################file1.py:向文本写入用户数据信息##########################################################################

importpickle

accounts={1000:{ #1000位账户ID

'name':'zxg','email':'xgzhang0626@gmail.com','passwd':'abc123','balance':15000, #余额

'phone':17750021629,'bank_acc':{'ICBC':142354,'CBC':454554,'ABC':3546845}#多个银行账户

},1001:{'name':'bbj','email':'xgzhang.hqu@gmail.com','passwd':'66666','balance':15000, #余额

'phone':15555915904,'bank_acc':{'ICBC':1424644},

}

}print(pickle.dumps(accounts))#此时pickle模块将字典转换成字符串,但输出显示的二进制#输出:b'\x80\x03}q\x00(M\xe8\x03}q\x01(X\x04\x00\x00\x00nameq...........

f= open(r'C:\Users\Administrator\Desktop\test.txt','wb')

p_str=pickle.dumps(accounts)

f.write(p_str)#将pickle转换后的字符串写入文本

f.close()###########################################################################file2.py:消费之后,修改余额,并重新写入原文件,也可以写入到新的文件##########################################################################

importpickle#在另一个文件对文本中的数据进行操作

account_file= open(r'C:\Users\Administrator\Desktop\test.txt','rb')

account_dic=pickle.loads(account_file.read())#将文本中的数据转回成字典

#print(account_dic) 输出的是之前的存进去的字典

account_file.close()#修改数据

account_dic[1000]['balance'] -= 500

#输出查看一下,已经修改#print(account_dic)

f= open(r'C:\Users\Administrator\Desktop\test.txt','wb')

p_str=pickle.dumps(account_dic)#更改之后,转换成字符串格式

f.write(p_str)#写入数据

f.close()###########################################################################file3.py:查看一下数据信息##########################################################################

importpickle

f= open(r'C:\Users\Administrator\Desktop\test.txt','rb')

account_read=pickle.loads(f.read())

f.close()print(account_read)#此时输出查看:数据已经更新

京东小案例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#dumps :将字典转换成字符串格式

importpickle

accounts={1000:{ #1000位账户ID

'name':'zxg','email':'xgzhang0626@gmail.com','passwd':'abc123','balance':15000, #余额

'phone':17750021629,'bank_acc&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值