一、time
1.三种表达方式
在Python中,通常有这几种方式来表示时间:
- 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。命令如下:
import time print(time.time())
输出
1496667277.8989
- 格式化的时间字符串(Format String)
import time print(time.strftime("%Y-%m-%d %X"))
输出
2017-06-05 20:55:48
补充:
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
- 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时),分为本地时区的struct_time和UTC时区的struct_time
-
世界标准时间,国际协调时间,简称UTC,不属于任意时区,中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。
import time print(time.localtime()) print(time.gmtime())
输出
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=5, tm_hour=20, tm_min=57, tm_sec=51, tm_wday=0, tm_yday=156, tm_isdst=0) time.struct_time(tm_year=2017, tm_mon=6, tm_mday=5, tm_hour=12, tm_min=57, tm_sec=51, tm_wday=0, tm_yday=156, tm_isdst=0)
补充:
很多Python函数用一个元组装起来的9组数字处理时间:
对应的属性:
2.三种方式间互相转换
其中计算机认识的时间只能是’时间戳’格式,而程序员可处理的或者说人类能看懂的时间有: ‘格式化的时间字符串’,’结构化的时间’ ,于是有了下图的转换关系
具体如下:
- time.localtime([secs]
接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
import time print(time.time()) print(time.localtime(1496669119.460393))
输出
1496669128.140584 time.struct_time(tm_year=2017, tm_mon=6, tm_mday=5, tm_hour=21, tm_min=25, tm_sec=19, tm_wday=0, tm_yday=156, tm_isdst=0)
- time.gmtime([secs])
接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
import time print(time.time()) print(time.gmtime(1496669119.460393))
输出
1496669289.290523 time.struct_time(tm_year=2017, tm_mon=6, tm_mday=5, tm_hour=13, tm_min=25, tm_sec=19, tm_wday=0, tm_yday=156, tm_isdst=0)
- time.mktime(t)
mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。
import time t = (2017, 6, 5, 22, 3, 38, 1, 48, 0) secs = time.mktime( t ) print ("time.mktime(t) : %f" % secs) print ("asctime(localtime(secs)): %s" % time.asctime(time.localtime(secs)))
输出
time.mktime(t) : 1496671418.000000 asctime(localtime(secs)): Mon Jun 5 22:03:38 2017
- time.strftime(fmt[,tupletime])
接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
import time print (time.strftime("%Y-%m-%d %H:%M:%S"))
- time.strptime(str,fmt=’%a %b %d %H:%M:%S %Y’)
根据fmt的格式把一个时间字符串解析为时间元组。
import time print (time.strptime("30 Nov 00", "%d %b %y"))
输出
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
补充:
- time.sleep(secs)
推迟调用线程的运行,secs指秒数。
import time print ("Start : %s" % time.ctime()) time.sleep( 5 ) print ("End : %s" % time.ctime())
输出
Start : Mon Jun 5 21:45:13 2017 End : Mon Jun 5 21:45:18 2017
- time.asctime([tupletime])
接受时间元组并返回一个可读的形式为”Tue Dec 11 18:07:14 2008”(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
import time t = time.localtime() print ("time.asctime(t): %s " % time.asctime(t))
输出
time.asctime(t): Mon Jun 5 21:52:55 2017
- time.ctime([secs])
作用相当于asctime(localtime(secs)),未给参数相当于asctime()
import time print ("time.ctime() : %s" % time.ctime())
输出
time.ctime() : Mon Jun 5 21:54:49 2017
二、random
- 从一个序列中随机的抽取一个元素,可以使用
random.choice()
- 为了提取出N个不同元素的样本用来做进一步的操作,可以使用
random.sample()
- 如果你仅仅只是想打乱序列中元素的顺序,可以使用
random.shuffle()
- 生成随机整数,请使用
random.randint()
- 生成0到1范围内均匀分布的浮点数,使用
random.random()
例:
import random print(random.random())#大于0且小于1之间的小数 print(random.randint(1,3)) #大于等于1且小于等于3之间的整数 print(random.randrange(1,3)) #大于等于1且小于3之间的整数 print(random.choice([1,'23',[4,5]])) print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合 print(random.uniform(1,3))#大于1小于3的小数 item=[1,3,5,7,9] random.shuffle(item) #打乱item的顺序,相当于"洗牌" print(item)
输出
应用:生成随机验证码
import random def v_code(): code = '' for i in range(5): num=random.randint(0,9) alf=chr(random.randint(65,90)) add=random.choice([num,alf]) code += str(add) return code print(v_code())
输出
KDZSY
三、OS
os模块是与操作系统交互的一个接口
os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录 os.chflags(path, flags) # 设置路径的标记为数字标记。 os.chmod(path, mode) # 更改权限 os.chown(path, uid, gid) # 更改文件所有者 os.chroot(path) # 改变当前进程的根目录 os.close(fd) # 关闭文件描述符 fd os.closerange(fd_low, fd_high) # 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 os.curdir # 返回当前目录:('.') os.dup(fd) # 复制文件描述符 fd os.dup2(fd, fd2) # 将一个文件描述符 fd 复制到另一个 fd2 os.environ # 获取系统环境变量 os.fchdir(fd) # 通过文件描述符改变当前工作目录 os.fchmod(fd, mode) # 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。 os.fchown(fd, uid, gid) # 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。 os.fdatasync(fd) # 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。 os.fdopen(fd[, mode[, bufsize]]) # 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象 os.fpathconf(fd, name) # 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。 os.fstat(fd) # 返回文件描述符fd的状态,像stat()。 os.fstatvfs(fd) # 返回包含文件描述符fd的文件的文件系统的信息,像 statvfs() os.fsync(fd) # 强制将文件描述符为fd的文件写入硬盘。 os.ftruncate(fd, length) # 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。 os.getcwd() # 返回当前工作目录 os.getcwdu() # 返回一个当前工作目录的Unicode对象 os.isatty(fd) # 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。 os.lchflags(path, flags) # 设置路径的标记为数字标记,类似 chflags(),但是没有软链接 os.lchmod(path, mode) # 修改连接文件权限 os.lchown(path, uid, gid) # 更改文件所有者,类似 chown,但是不追踪链接。 os.link(src, dst) # 创建硬链接,名为参数 dst,指向参数 src os.listdir(path) # 返回path指定的文件夹包含的文件或文件夹的名字的列表。 os.lseek(fd, pos, how) # 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效 os.lstat(path) # 像stat(),但是没有软链接 os.linesep # 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.major(device) # 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。 os.makedev(major, minor) # 以major和minor设备号组成一个原始设备号 os.makedirs(path[, mode]) # 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。 os.minor(device) # 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。 os.mkdir(path[, mode]) # 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。 os.mkfifo(path[, mode]) # 创建命名管道,mode 为数字,默认为 0666 (八进制) os.mknod(filename[, mode=0600, device]) # 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。 os.open(file, flags[, mode]) # 打开一个文件,并且设置需要的打开选项,mode参数是可选的 os.openpty() # 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。 os.pathconf(path, name) # 返回相关文件的系统配置信息。 os.pathsep # 用于分割文件路径的字符串 os.pardir # 获取当前目录的父目录字符串名:('..') os.pipe() # 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写 os.popen(command[, mode[, bufsize]]) # 从一个 command 打开一个管道 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.name # 字符串指示当前使用平台。win->'nt'; Linux->'posix' os.read(fd, n) # 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。 os.readlink(path) # 返回软链接所指向的文件 os.remove(path) # 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。 os.removedirs(path) # 递归删除目录。若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.rename(src, dst) # 重命名文件或目录,从 src 到 dst os.renames(old, new) # 递归地对目录进行更名,也可以对文件进行更名。 os.rmdir(path) # 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。 os.sep # 操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.stat(path) # 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。 os.stat_float_times([newvalue]) # 决定stat_result是否以float对象显示时间戳 os.statvfs(path) # 获取指定路径的文件系统统计信息 os.symlink(src, dst) # 创建一个软链接 os.system("bash command") # 运行shell命令,直接显示 os.tcgetpgrp(fd) # 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组 os.tcsetpgrp(fd, pg) # 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。 os.tempnam([dir[, prefix]]) # 返回唯一的路径名用于创建临时文件。 os.tmpfile() # 返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。 os.tmpnam() # 为创建一个临时文件返回一个唯一的路径 os.ttyname(fd) # 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。 os.unlink(path) # 删除文件路径 os.utime(path, times) # 返回指定的path文件的访问和修改的时间。 os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]) # 输出在文件夹中的文件名通过在树中游走,向上或者向下。 os.write(fd, str) # 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
四、sys
sys模块用于提供对python解释器的相关操作。
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules 返回系统导入的模块字段,key是模块名,value是模块 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] sys.modules.keys() 返回所有已经导入的模块名 sys.modules.values() 返回所有已经导入的模块 sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 sys.exit(n) 退出程序,正常退出时exit(0) sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0 sys.version 获取Python解释程序的 sys.api_version 解释器的C的API版本 sys.version_info ‘final’表示最终,也有’candidate’表示候选,serial表示版本级别,是否有后继的发行 sys.displayhook(value) 如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__._.指在python的交互式解释器里,’_’ 代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来 sys.getdefaultencoding() 返回当前你所用的默认的字符编码格式 sys.getfilesystemencoding() 返回将Unicode文件名转换成系统文件名的编码的名字 sys.setdefaultencoding(name)用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出 LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除 sys.builtin_module_names Python解释器导入的模块列表 sys.executable Python解释程序路径 sys.getwindowsversion() 获取Windows的版本 sys.copyright 记录python版权相关的东西 sys.byteorder 本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’ sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息 sys.exec_prefix 返回平台独立的python文件安装的位置 sys.stderr 错误输出 sys.stdin 标准输入 sys.stdout 标准输出 sys.platform 返回操作系统平台名称 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.maxunicode 最大的Unicode值 sys.maxint 最大的Int值 sys.version 获取Python解释程序的版本信息 sys.hexversion 获取Python解释程序的版本值,16进制格式如:0x020403F0
例
进度条(注意:在pycharm中执行无效,请到命令行中以脚本的方式执行)
import sys,time for i in range(50): sys.stdout.write('%s\r' %('#'*i)) sys.stdout.flush() time.sleep(0.1)
五、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)
拷贝文件和权限
import shutil shutil.copy('f1.log', 'f2.log')
- shutil.copy2(src, dst)
拷贝文件和状态信息
import shutil shutil.copy2('f1.log', 'f2.log')
- shutil.ignore_patterns(*patterns)
- shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
import shutil shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
- shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil shutil.rmtree('folder1')
- shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
import shutil shutil.move('folder1', 'folder3')
- shutil.make_archive(base_name, format,…)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如 data_bak =>保存至当前路径 如:/tmp/data_bak =>保存至/tmp/ format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” root_dir: 要压缩的文件夹路径(默认当前目录) owner: 用户,默认当前用户 group: 组,默认当前组 logger: 用于记录日志,通常是logging.Logger对象