一、在python中,通常有这几种方式来表示时间:

  • 时间戳

    SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 格式化的时间字符串

  • 元祖(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以每个平台可能有所不同。

二、几个定义

  UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

  时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移值。我们运行type(time.time()),返回的是float类型。

  元祖(struct_time)方式:struct_time元祖共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元祖中的几个元素:

属性 值 tm_year(年) 比如2019 tm_mon(月) 1 - 12 tm_mday(日) 1 - 31 tm_hour(时) 0 - 23 tm_min(分) 0 - 59 tm_sec(秒) 0 - 61 tm_wday(weekday) 0 - 6(0表示周日) tm_yday(一年中的第几天) 1 - 366 tm_isdst(是否是夏令时) 默认为-1

一、time模块的方法

time.localtime( [secs] )
将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间
参数:

sec – 转换为time.struct_time类型的对象的秒数
如果secs参数未提供,则以当前时间为准(即会默认调用time.time())。

>>> import time >>> time.localtime() time.struct_time(tm_year=2019, tm_mon=1, tm_mday=23, tm_hour=10, tm_min=31, tm_sec=21, tm_wday=2, tm_yday=23, tm_isdst=0)

time.gmtime([secs])
将一个时间戳转换为UTC时区的struct_time
time.gmtime() 函数将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1 00:00:00以来的秒数。其默认值为time.time(),函数返回time.struct_time类型的对象。(struct_time是在time模块中定义的表示时间的对象)。
如果secs参数未提供,则以当前时间为准。
参数:

sec – 转换为time.struct_time类型的对象的秒数

>>> time.gmtime() time.struct_time(tm_year=2019, tm_mon=1, tm_mday=23, tm_hour=2, tm_min=34, tm_sec=6, tm_wday=2, tm_yday=23, tm_isdst=0) >>>

time.time()

返回当前时间的时间戳

>>> time.time() 1548210925.5266087

time.mktime(t)

将一个struct_time转化为时间戳
time.mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数表示时间的浮点数。
如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。
参数:

t – 结构化的时间或者完整的9位元组元素

>>> time.mktime(time.localtime()) 1548211010.0

time.sleep(secs)

线程推迟指定的时间运行 
线程睡眠指定时间,单位为妙。

>>> time.sleep(2)  # 睡眠2秒

time.asctime( [t] )
把一个表示时间的元组或者struct_time表示为 ‘Sun Aug 23 14:31:59 2015’ 这种形式。如果没有给参数,会将time.localtime()作为参数传入。
参数:

t – 9个元素的元组或者通过函数 gmtime() 或 localtime() 返回的时间值

>>> time.asctime() 'Wed Jan 23 10:39:47 2019'

time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果为指定参数,将会默认使用time.time()作为参数。它的作用相当于time.asctime(time.localtime(secs))
参数:

sec – 要转换为字符串时间的秒数

>>> time.ctime() 'Wed Jan 23 10:41:58 2019'

time.strftime( format [, t] )
返回字符串表示的当地时间。
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。
参数:

format:格式化字符串
t :可选的参数是一个struct_time对象
时间字符串支持的格式符号:(区分大小写)

%a 本地星期名称的简写(如星期四为Thu) %A 本地星期名称的全称(如星期四为Thursday) %b 本地月份名称的简写(如八月份为agu) %B 本地月份名称的全称(如八月份为august) %c  本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06%d  一个月中的第几天(01 - 31%f  微秒(范围0.999999%H  一天中的第几个小时(24小时制,00 - 23%I  第几个小时(12小时制,0 - 11%j  一年中的第几天(001 - 366%m  月份(01 - 12%M  分钟数(00 - 59%p 本地am或者pm的相应符 %S  秒(00 - 61%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。 %w  一个星期中的第几天(0 - 6,0是星期天) %W  和%U基本相同,不同的是%W以星期一为一个星期的开始。 %x  本地相应日期字符串(如15/08/01%X  本地相应时间字符串(如08:08:10%y  去掉世纪的年份(00 - 99)两个数字表示的年份 %Y 完整的年份(4个数字表示年份) %z 与UTC时间的间隔(如果是本地时间,返回空字符串) %Z 时区的名字(如果是本地时间,返回空字符串) %%  ‘%’字符  

time.strptime(string[,format])
将格式字符串转化成struct_time.
该函数是time.strftime()函数的逆操作。time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。所以函数返回的是struct_time对象。
参数:

string :时间字符串
format:格式化字符串

注意在使用strptime()函数将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致,如果string中日期间使用“-”分隔,format中也必须使用“-”分隔,时间中使用冒号“:”分隔,后面也必须使用冒号分隔,否则会报格式不匹配的错误。

时间格式转换图:

 时间、文件、系统、序列化模块 Python

 

二、datetime模块

  • datetime模块定义了下面几个类:

  • datetime.date:表示日期的类。常用的属性有year,month,day;

  • datetime.time:表示时间的类。常用的属性有hour,minute,second,microsecond;

  • datetime.datetime:表示日期时间。

  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度;

  • datetime.tzinfo:与时区有关的信息。

需要记住的方法:

  1. d = datetime.datetime.now() 返回当前的datetime日期类型

    •   d.timestamp(),d.today,d.year,d.timetuple()等方法可以调用

  2. datetime.date.fromtimestamp() 把一个时间戳转为datetime日期类型

  3. 时间运算

>>> datetime.datetime.now() datetime.datetime(2019, 1, 23, 11, 3, 42, 125406) >>> datetime.datetime.now() + datetime.timedelta(4)  # 当前时间+4天
datetime.datetime(2019, 1, 27, 11, 4, 18, 791478) >>> datetime.datetime.now() + datetime.timedelta(hours=4)  # 当前时间+4小时
datetime.datetime(2019, 1, 23, 15, 4, 52, 988594)

  4. 时间替换

>>> d.replace(year=1994,month=11,day=12) datetime.datetime(1994, 11, 12, 11, 0, 27, 749344)

 

三、random模块

>>> random.randrange(0,100,2)  # 随机选取 0到100间的偶数
64
>>> random.random()  # 返回一个随机浮点数
0.2246826615173001
>>> random.choice('abc123#$%')  # 返回一个给定数据集合中的随机字符
'1'
>>> random.sample('abcdefg',3)  # 从多个字符中选取特定数量的字符
['g', 'd', 'f'] >>>
>>> # 生成随机字符串
... import string >>> ''.join(random.sample(string.ascii_lowercase+string.digits,6)) 'kwcsq4'
>>>
>>> # 洗牌
... a = [1,2,3,4,5,6,7,8,9] >>> random.shuffle(a) >>> a [8, 5, 1, 6, 9, 7, 3, 4, 2]

 

四、os模块

 

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 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.popen("bash command) 运行shell命令,获取执行结果
os.environ 获取系统环境变量 os.path 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.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小

 

os.stat('path\filename') 获取文件\目录信息的结构说明

stat 结构: st_mode: inode 保护模式 st_ino: inode 节点号。 st_dev: inode 驻留的设备。 st_nlink: inode 的链接数。 st_uid: 所有者的用户ID。 st_gid: 所有者的组ID。 st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,<br>在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

 

五、sys模块

import sys sys.argv # 命令行参数List,第一个元素是程序本身路径
sys.exit(n)  # 退出程序,正常退出时exit(0)
sys.version  # 获取Python解释程序的版本信息
sys.maxint  # 最大的Int值
sys.path  # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform  # 返回操作系统平台名称
sys.stdout.write('please:')  # 标准输出,引出进度条的例子。注:在py3上不行,可以用print代替
val = sys.stdin.readline()[:-1]  # 标准输入
sys.getrecursionlimit()  # 获取最大递归层数
sys.setrecursionlimit(1200)  # 设置最大递归层数
sys.getdefaultencoding()  # 获取解释器默认编码
sys.getfilesystemencoding  # 获取内存数据存到文件里的默认编码

 

六、shutil模块

 高级的文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc,fdst[,length])

将文件内容拷贝到另一个文件中

import shutil shutil.copyfileobj(open('old.xml','r'), open('new.xml','w'))

shutil.copyfile(src,dst)

拷贝文件

shutil.copyfile('f1.log','f2.log')  # 目标文件无需存在

shutil.copymode(src,dst)

仅拷贝权限。内容、组、用户均不变

shutil.copymode('f1.log','f2.log')  # 目标文件必须存在

shutil.copystat(src,dst)

仅拷贝状态的信息,包括:mode bits,atime,mtime,flags

shutil.copystat('f1.log','f2.log')  # 目标文件必须存在

shutil.copy(src,dst)

拷贝文件和权限

shutil.copy('f1.log','f2.log')

shutil.copy2(src,dst)

拷贝文件和状态信息

shutil.copy2('f1.log','f2.log')

shutil.ignore_patterns(*patterns)
shutil.copytree(src,dst,symlinks=False,ignore=None)

递归的去拷贝文件夹

shutil.copytree('folder1','folder2',ignore=shutil.ignore_patterns('*.pyc','tmp*'))  # 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除

shutil.rmtree(path[,ignore_errors=[,onerror]])

递归的去删除文件

shutil.rmtree('folder1')

shutil.move(src,dst)

递归的去移动文件,它类似mv命令,其实就是重命名。

shutil.move('folder1','folder3')

shutil.make_archive(base_name,format,...)

创建压缩包并返回文件路径,例如:zip,tar

  • base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。如data_bak=>保存至当前路径;如/tmp/data_bak=>保存到/tmp/

  • format:压缩包种类,“zip”,"tar","bztar","gztar"

  • root_dir:要压缩的文件夹路径(默认当前目录)

  • owner:用户,默认当前用户

  • group:组,默认当前组

  • logger:用于记录日志,通常的loggin.Logger对象

# 将/data 下的文件打包放置当前程序目录
ret = shutil.make_archive('data_bak','gztar',root_dir='/data') # 将/data下的文件打包放置/tmp/目录
ret = shutil.make_archive('/tmp/data_bak','gztar',root_dir='/data')

shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的

# zipfile压缩和解压缩
import zipfile # 压缩
z = zipfile.ZipFile('aaa.zip','w') z.write('bbb.log') z.write('data.data') z.close() # 解压缩
z = zipfile.ZipFile('aaa.zip','r') z.extractall(path='.') z.close()

 

# tarfile压缩和解压缩
import tarfile # 压缩
t = tarfile.open('/tmp/aaa.tar','w') t.add('/test/a.py',arcname='a.bak') t.add('/test/b.py',arcname='b.bak') t.close() # 解压缩
t = tarfile.open('/tmp/aaa.tar','r') t.extractall('/test') t.close()

 

七、json&pickle模块

什么叫序列化?序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes。

用于序列化的两个模块

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

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

Json模块提供四个模块;dumps,dump,loads,load

pickle模块提供四个模块;dumps,dump,loads,load

import pickle data = {'k1':123,'k2':'hello'} # pickle.dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data) print(p_str) # pickle.dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('test','w') as fp: pickle.dumps(data,fp) import json # json.dumps 将数据通过特殊的形式转换为所有程序语言认识的字符串
j_str = json.dumps(data) print(j_str) # json.dump 将数据通过特殊的形式转换为所有程序语言认识的字符串,并写入文件
with open('test','w') as fp: json.dump(data,fp)

json vs pickle:

  JSON:

  优点:跨语言,体积小

  缺点:只能支持int/str/list/tuple/dict

  Pickle:

  优点:专为python设计,支持python所有的数据类型

  缺点:只能在python中使用,存储数据占空间大

 

八、shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

序列化:

import shelve f = shelve.open('shelve_test')  # 打开一个文件
names = ['悟空','八戒','沙僧'] info = {'name':'悟空','age':999} f['name'] = names f['info_dic'] = info f.close()

反序列化:

import shelve d = shelve.open('shelve_test')  # 打开一个文件
print(d['names']) print(d['info_dic']) # del d['test'] # 还可以删除

 


原文:https://blog.csdn.net/SeeTheWorld518/article/details/48314501 

   https://www.cnblogs.com/tkqasn/p/6001134.html
    

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄