python进阶06 常用问题库(2)datetime模块 base64
python进阶06 常用问题库(2)datetime模块 base64
一、datetime模块(时间)
1、datetime.time()
t=datetime.time(20,43,30,1) #输出20:43:30:000001 ;四个数字分别代表时,分,秒,微秒
2、datetime.date()
d=datetime(2018,3,1)#输出2018-03-01,4个数字分别代表年,月,日
3、datetime.datetime() (最常用的就是这个)
dt=datetime.datetime(2018,3,1,20,48,20,1)#年,月,日,时,分,秒,微秒
#输出的都是__str__()
4、返回当前时间
datetime.datetime.now()#输出2018-03-01 20:55:58.222351用这个函数显示当前时间
5、返回国际标准时间
datetime.datetime.utcnow()# 0区的当前时间,中国就是在这个时间上+8个小时 #做网站时,服务器上最好存utc时间,数据可以全球统一
6、时间戳转日期时间
dt=datetime.detetime.fromtimestamp(151999021592.2198606)#输出日期时间
7、日期时间转时间戳
#有时候我们又希望看到时间戳,因为时间戳就是一个数字,占用的空间比较小,存的时间比较快,而并不是所有都是这么设置的 #当然这个问题通常是DBA的工作 #因此我们还是需要将一个时间日期变成时间戳 import time #需要导入time模块 dt=time.mktime(datetime.datetime.now()) print(dt) #输出时间戳
8、时间计算
#现在是2018-03-01 我想+1天 2018-03-02 #有个专门表示时间差的类型 datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0) #分别代表天,秒,微秒,毫秒,分,时,周 #通常需要以关键字参数的形式去实例化,因为他的默认顺序和常见的不一样,它是按常用程度排序的 print(datetime.datetime(2018,2,28,23)+datetime.timedelta(hour=8))#输出2018-03-01 07:00:00
9、时间和字符串之间的转换
dt=datetime.datetime(2018,2,28,23,0,0,10) #想看11:00PM(12小时制的) #时间转化成字符串(适用web开发) datetime.strftime(self,format_string) #self格式字符串format_string是时间 #这是个实例方法,必须通过dt.strftime()的形式来调用 格式 描述 %Y/%y 年 %m 月 %d 日 %H/%h 时 %M 分 %S 秒 %p AM/PM s=dt.strftime('%m/%d/%Y %H:%M:%S %p') #月/天/年 12小时的时间 print(s) # 02/28/18 11:00:00 PM #字符串转化为时间(适合爬虫) datetime.strptime(string,format_string) #这是个类方法 dt=datetime.datetime.strptime('02/28/18/11:00:00:PM','%m/%d/%Y %H:%M:%S %p')#将前面的时间按后面的方式来解析
10、时区问题
#我们能够获取到的时间都是本地时间,不会附加时区信息 datetime.timezone(offset,name) #offset偏移,相对你的所要时间的偏差 #设备一(当地时区时间系统)----->设备一 标准时间(utc时间)---->设备二(转化为当地时间)---->设备二 当地时区时间系统 #这也是为何在服务器中最好存utc时间的原因 import datetime dt=datetime.datetime(2018,3,1,8)#只表示时间,并不表示某个时区的时间 #想要表示时区,得先有个时区对象 tz_China=datetime.timezone(offset=datetime.timedelta(hours=8),name='Asia/China')#相对于utc时间偏移8个小时,名称是北京时间 tz_US=datetime.datetime(offset=datetime.datetime(hours=-8,name='America')) dt=datetime.datetime(2018,3,1,8,tzinfo=tz_China)#有了tzinfo就可以在实例化时间的时候同时添加时区信息 #现在我的时间是中国的,我想转换为美国时间 us_dt=dt.astimezone(tz_us)#输出2018-03-01 04:00:00 #因为上面已经定义好美国时间和中国时间,给出了中国当前的时间,计算机会自动算出美国时间 #上面的tz_**可以自己定义,通过这个框架就可以直接得住自己需要的时区 #utc其实是有现成的时区对象的 #总结: #我们在服务器上存utc时间,当然也可以不存utc时间,只要你有时区信息,这都不是问题 #如果存了utc时间,转化的工作交给前段,detetime.datetime.utcnow()没有带时区信息 #如果后台存了当地时间,一定要带上时区信息,返回的时候必须要直接做转换
#3个时间对象 #4个实用函数 #计算时差 timedelta #时间和字符串转换的问题 #时区的问题
二、base64编码
#解决什么问题 #有些信息必须要以纯文本的形式传输(邮件,网页),如果要附带一些二进制数据,就可以用base64编码来处理 #base64编码接收一个二进制的数据,然后把它转化成一个文本(当然可以转换回来 )
import base64 with open('xx.png','rb') as f: #打开一个名为xx.png的文件到f print(base64.standard_b64encode(f.read())) #以文本的形式输出f的内容(通过encode将二进制转化为文本) #如果是decode,就是把编码后的文本,转为原来的二进制文件 #网站有两种方法展示图片,第一种是先打开页面,在加载图片,第二种图片直接嵌入在页面里面 #第一种方法需要两次连接服务器,这样会导致额外的开销 #第二种方法,由于网页的HTML只能接受文本,所以通过base64将二进制文件将它变成一个文本即可
三、作业
遍历一个目录,输出其中所有的文件(包括子目录下面的文件)
#思路:先列一层,把这一层所有的都输出出来,如果其中有文件夹,再重重复同样的事情(也就是递归) import os def list_all(path): #os.listdir(path)#一个目录下所有的文件或目录的文字的列表 print(path) for sth in os.listdir(path):#因为的得到的目录只是名字,不知道是目录还是文件,所以需要遍历,然后判断; #注意!sth此时只是一个文件名,我就需要它的路径 abs_path=os.path.join(path,sth)#而上面得到只是相对路径,而下面的判断必须是要绝对路径,所以将他拼接成一个绝对路径 if os.path.isdir(abs_path):#如果sth是一个目录的话 list_all(abs_sth)#递归上面的函数 else: print(abs_path)#输出不是目录的文件的路径