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)#输出不是目录的文件的路径

 

posted on 2018-03-04 22:45  许铖铖  阅读(271)  评论(0编辑  收藏  举报