zoukankan      html  css  js  c++  java
  • 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)#输出不是目录的文件的路径
  • 相关阅读:
    可持久化线段树区间查询 + 永久化标记 T^T online judge 2507
    可持久化线段树
    T^T online judge 3441
    食物链
    T^T ONLINE JUDGE 2592
    HDU 6312 GAME
    HDU 1430 魔板
    栈的操作链表+数组版
    Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round) D. Peculiar apple-tree
    Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round) C. Laboratory Work
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8506717.html
Copyright © 2011-2022 走看看