sys模块

sys 是一个和 Python 解释器关系密切的标准库,它和帮助我们访问和 Python 解释器联系紧密的变量和函数。在前面的代码学习中,你就已经见到过sys模块的用法了,这篇文章我们再次做一下介绍

常用函数
sys成员(变量和函数)功能描述
sys.argv获取运行 Python 程序的命令行参数。其中 sys.argv[0] 通常就是指该 Python 程序,sys.argv[1] 代表为 Python 程序提供的第一个参数,sys.argv[2] 代表为 Python 程序提供的第二个参数……依此类推。
sys.path是一个字符串列表,其中每个字符串都是一个目录名,在使用 import 语句导入模块时,解释器就会从这些目录中查找指定的模块。
sys.exit()通过引发 SystemExit 异常来退出程序。将其放在 try 块中不能阻止 finally 块的执行。你可以提供一个整数作为参数(默认为 0 ,标识成功),用来标识程序是否成功运行,这是 UNIX 的一个惯例。
sys.modules返回模块名和载入模块对应关系的字典。
sys.platform此变量是一个字符串,标识解释器当前正在运行的平台名称,它可能是标识操作系统的名称,也可能是标识其他种类的平台,如果运行 Jython 的话,就是 Java 虚拟机。
sys.stdin、sys.stdout、sys.stderr这三个模块变量是类文件流对象,分别表示标准输入、标准输出和标准错误。简单理解,Python 利用 sys.stdin 获得输入,利用 sys.stdout 输出。
sys.flags该只读属性返回运行 Python 命令时指定的旗标。
sys.getfilesystemencoding()返回在当前系统中保存文件所用的字符集。
sys.getrefcount(object)返回指定对象的引用计数。前面介绍过,当 object 对象的引用计数为 0 时,系统会回收该对象。
sys.getrecursionlimit()返回 Python 解释器当前支持的递归深度。该属性可通过 setrecursionlimit() 方法重新设置。
sys.getswitchinterval()返回在当前 Python 解释器中线程切换的时间间隔。该属性可通过 setswitchinterval() 函数改变。
sys.implementation返回当前 Python 解释器的实现。
sys.maxsize返回 Python 整数支持的最大值。在 32 位平台上,该属性值为 2**31-1;在 64 位平台上,该属性值为 2**63-1。
sys.executable该属性返回 Python 解释器在磁盘上的存储路径。
sys.byteorder显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回 big;否则返回 little。
sys.copyright该属性返回与 Python 解释器有关的版权信息。
sys.version返回当前 Python 解释器的版本信息。
sys.winver返回当前 Python 解释器的主版本号。
实例引入
    import sys
    print(sys.argv)  #命令行参数,List类型,第一个参数为程序本身路径
    sys.exit(0) #退出程序,正常退出时exit(0)
    print(sys.version) #获取Python版本信息
    print(sys.path) #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    print(sys.platform) #返回操作系统平台名称

很多方法你也可以自己简单尝试一下

os模块

os 模块代表了程序所在的操作系统,主要用于获取程序运行所在操作系统的相关信息。可以先导入 os 模块,然后输入 os.__all__ 命令(__all__ 变量代表了该模块开放的公开接口),即可看到该模块所包含的全部变量和函数。当然了内容是非常多的,全部要记住也是不可能的,这里也只是介绍常用方法。

常用函数
os 成员(变量、函数和类)功能描述
os.name返回导入依赖模块的操作系统名称,通常可返回 ‘posix’、’nt’、 ‘java’ 等值其中之一。
os.environ返回在当前系统上所有环境变量组成的字典。
os.sep返回路径分隔符。
os.getenv(key, default=None)获取指定环境变量的值。
os.getpid()获取当前进程 ID。
os.putenv(key, value)该函数用于设置环境变量。
os.pathsep返回当前系统上多条路径之间的分隔符。一般在 Windows 系统上多条路径之间的分隔符是英文分号(;);在 UNIX 及类 UNIX 系统(如 Linux、Mac os X)上多条路径之间的分隔符是英文冒号(:)。
os.linesep返回当前系统的换行符。一般在 Windows 系统上换行符是“\r\n”:在 UNIX 系统上换行符是“\n”;在 Mac os X 系统上换行符是“\r”。
os.urandom(size)返回适合作为加密使用的、最多由 N 个字节组成的 bytes 对象。该函数通过操作系统特定的随机性来源返回随机字节,该随机字节通常是不可预测的,因此适用于绝大部分加密场景。
os进程管理函数功能描述
os.access(path, mode)检验权限模式
os.chdir(path)改变当前工作目录
os.chmod(path, mode)更改权限
os.chown(path, uid, gid)更改文件所有者
os.chroot(path)改变当前进程的根目录
os.close(fd)关闭文件描述符 fd
os.fchdir(fd)通过文件描述符改变当前工作目录
os.getcwd()返回当前工作目录
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.makedirs(path[, mode])递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
os.mkdir(path[, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
os.open(file, flags[, mode])打开一个文件,并且设置需要的打开选项,mode参数是可选的
os.popen(cmd, mode=’r’, buffering=-1)用于向 cmd 命令打开读写管道(当 mode 为 r 时为只读管道,当 mode 为 rw 时为读写管道),buffering 缓冲参数与内置的 open() 函数有相同的含义。该函数返回的文件对象用于读写字符串,而不是字节。
os.pathconf(path, name)返回相关文件的系统配置信息。
os.read(fd, n)从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
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.statvfs(path)获取指定路径的文件系统统计信息
os.unlink(path)删除文件路径
os.write(fd, str)写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
os.stat()官方解释过于复杂,返回stat_result对象。我们一般可以这样用os.stat(filename).st_size,提取文件的大小,。
实例引入
    import os
    print(os.getcwd()) #获取当前工作目录,就是当前脚本工作的目录路径
    print(os.chdir('dirname')) #改变当前脚本的工作路径,相当于shell下的cd,就是切换目录
    print(os.curdir) #返回当前目录'.'当前目录
    print(os.pardir) #获取当前目录的父目录字符串名'..'上级目录
    print(os.removedirs('dirname1') ) #若目录为空则删除,并递归到上一级目录,若也为空,则删除,以此类推
    print(os.mkdir('dirname')) #生成单级目录,相当于shell中mkdir dirname
    print(os.makedirs('dirname1/dirname2')) #可生成多层递归目录
    print(os.rmdir('dirname')) #删除单级空目录,若目录不为空,则无法删除会报错,相当于shell中rmdir dirname
    print(os.listdir('dirname')) #列出指定目录下所有文件和子目录,包括隐藏文件,并以列表方式打印
    print(os.remove('dirname')) #删除一个文件
    print(os.rename('oldname','newname')) #重命名文件/目录
    print(os.stat('path/filename')) #获取文件/目录信息
    print(os.sep) #输出操作系统特定的路径分割符,windows下为"\\",Linux下为"/"
    print(os.linesep) #输出当前平台使用的行终止符,windows下为"\t\n或者\r\n",Linux下为"\n"
    print(os.pathsep) #输出用于分割路径的字符串,Windows下为'.'
    print(os.name) #输出字符串指示当前使用平台,Windows下为'nt',Linux下为'posix'
    print(os.environ) #获取系统环境变量
    print(os.system('bash command')) #运行shell命令,直接显示,system('ipconfig /all')
    print(os.path.abspath(path)) #返回path规范化的绝对路径
    print(os.path.split(path)) #将path分割成目录和文件名二元组返回,第一部分为文件目录,第二部分文件名
    print(os.path.dirname(path)) #返回path的路径,就是os.path.split(path)的第一个元素
    print(os.path.basename(path)) #返回path最后的文件名,path以/或\结尾,就会返回空值
    # 就是os.path.split(path)第二部分,文件名
    print(os.path.exists(path)) #如果path存在,True,如果path不存在,False
    print(os.path.isabs(path)) #如果path是绝对路径,True,相对路径就是没有开头的目录
    print(os.path.isfile(path)) #如果path是一个存在的文件,True,否则 False
    print(os.path.isdir(path)) #如果path是一个存在的目录,True,否则 False
    print(os.path.join(path[path1[,path2[,...]]])) #将多个路径组合后返回,第一个绝代路径之前的参数将被忽略
    print(os.path.getatime(path)) #返回path所指向的文件或者目录的最后存取时间
    print(os.path.getmtime(path)) #返回path所指向的文件或者目录的最后修改时间

os模块的函数最多了,更多详细介绍请查看os官方文档

time模块

Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:

#!/usr/bin/python3

import time;  # 引入time模块

ticks = time.time()
print ("当前时间戳为:", ticks)

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。话说我们知道那么早的时间干什么?

时间元组

很多Python函数用一个元组装起来的9组数字处理时间:

序号 字段
04位数年2008
11 到 12
21到31
3小时0到23
4分钟0到59
50到61 (60或61 是闰秒)
6一周的第几日0到6 (0是周一)
7一年的第几日1到366 (儒略历)
8夏令时-1, 0, 1, -1是决定是否为夏令时的旗帜

上述也就是struct_time元组。这种结构具有如下属性:

序号属性
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday一年中的第几天,1 到 366
8tm_isdst是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1

那么你可以在pycharm编辑器输入下面的代码来查看效果:

import time
localtime=time.localtime()
print('当前时间为:',localtime)

常用函数

time常用函数功能描述
time.asctime([t])将时间元组或 struct_time 转换为时间字符串。如果不指定参数 t,则默认转换当前时间。
time.ctime([secs])将以秒数代表的时间(格林威治时间)转换为时间字符串。
time.gmtime([secs])将以秒数代表的时间转换为 struct_time 对象。如果不传入参数,则使用当前时间。
time.localtime([secs])将以秒数代表的时间转换为代表当前时间的 struct_time 对象。如果不传入参数,则使用当前时间。
time.mktime(t)它是 localtime 的反转函数,用于将 struct_time 对象或元组代表的时间转换为从 1970 年 1 月 1 日 0 点整到现在过了多少秒。
time.perf_counter()返回性能计数器的值。以秒为单位。
time.process_time()返回当前进程使用 CPU 的时间,以秒为单位。
time.sleep(secs)暂停 secs 秒,什么都不干。
time.strftime(format[, t]) 将时间元组或 struct_time 对象格式化为指定格式的时间字符串。如果不指定参数 t,则默认转换当前时间。
time.strptime(string[, format])将字符串格式的时间解析成 struct_time 对象。
time.time()返回从 1970 年 1 月 1 日 0 点整到现在过了多少秒。
time.timezone返回本地时区的时间偏移,以秒为单位。
time.tzname返回本地时区的名字。
实例引入
import time

localtime =time.asctime(time.localtime(time.time()))
print ("本地时间为 :", localtime)
print(dir(time)) #查看模块的全部属性和函数

time.sleep(3) #暂停3秒,什么也不会干
print(time.asctime((2019,12,12,17,0,5,0,0,0)))
print(time.ctime(40))  #将秒数为代表的时间转换为时间字符串
print(time.gmtime(50)) #将秒数为代表的时间转换为struct_time对象
print(time.gmtime()) #当前时间转换为struct_time对象
print(time.process_time())  #返回当前进程使用cpu的时间
print(time.perf_counter())  #返回性能计数器的值

# 格式化成2019-12-12 17:20:24形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Thu Dec 12 17:20:24 2019形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))

# 将格式字符串转换为时间戳
a = "Thu Dec 12 17:20:24 2019"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))

python中时间日期格式化符号:

指令含义
%a本地化的星期几的缩写名,比如 Sun 代表星期天
%A本地化的星期几的完整名
%b本地化的月份的缩写名,比如 Jan 代表一月
%B本地化的月份的完整名
%c本地化的日期和时间的表示形式
%d代表一个月中第几天的数值,范固: 01~31
%H代表 24 小时制的小时,范围:00~23
%I代表 12 小时制的小时,范围:01~12
%j一年中第几天,范围:001~366
%m代表月份的数值,范围:01~12
%M代表分钟的数值,范围:00~59
%p上午或下午的本地化方式。当使用 strptime() 函数并使用 %I 指令解析小时时,%p 只影响小时字段
%S代表分钟的数值,范围:00~61。该范围确实是 00~61,60 在表示闰秒的时间戳时有效,而 61 则是由于一些历史原因造成的
%U代表一年中表示第几周,以星期天为每周的第一天,范围:00~53。在这种方式下,一年中第一个星期天被认为处于第一周。当使用 strptime() 函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效
%w代表星期几的数值,范围:0~6,其中 0 代表周日
%W代表一年小第几周,以星期一为每周的第一天,范围:00~53。在这种方式下,一年中第一个星期一被认为处于第一周。当使用 strptime() 函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效
%x本地化的日期的表示形式
%X本地化的时间的表示形式
%y年份的缩写,范围:00~99,比如 2018 年就简写成 18
%Y年份的完整形式。如 2018
%z显示时区偏移
%Z时区名(如果时区不行在,则显示为空)
%%用于代表%符号

其实很多你也不必要去纠结过多,都是固定的写法,这里只是介绍了常用的,更详细的内容见官方文档,我没有必要在把内容照搬过来。

datatime模块

这个模块说真的,不常用,我在这里不再进行整理,初学者建议以后用到再过来查看datatime官方文档

shutil模块

    import shutil
    #将打开两个文件,将f1复制到f2中,需要指定原文件的编码格式
    f1=open('file.py',encoding='utf-8')
    f2=open('text.py','w',encoding='utf-8')
    shutil.copyfileobj(f1,f2)
   
    shutil.copyfile('file.py','file1.py')  #只拷贝文件,不会拷贝权限
    
    shutil.copymode(src,dst) #仅拷贝权限,内容、组、用户均不变
    
    shutil.copystat(src,dst) #拷贝状态的信息,包括权限,修改时间,最后一次修改时间
   
    shutil.copy(src,dst)  #拷贝文件和状态信息
   
    shutil.copy2(src,dst) #拷贝文件和状态信息
    
    shutil.copytree('file','new_file') #递归的去拷贝文件,相当于拷贝目录
    
    shutil.rmtree('new_file')#递归的去删除目录
    
    shutil.move(src,dst) #递归的去移动文件
压缩
shutil.make_archive(base_name,format,...)
shutil.make_archive('new','zip','C:\/Users\Administrator\.PyCharmCE2019.1\config\scratches')
  • base_name:压缩包的文件名,也可以是压缩包的路径,只是文件名时,保存至当前目录,否则保存至指定目录
  • format:压缩包种类,zip、tar、bztar、gztar
  • root_dir:要压缩的文件夹路径(默认当前路径)
  • owner:用户,默认当前用户
  • group:组,默认当前组
  • logger:用于记录日志,通常是logging.Logger对象

math模块

    ceil #取大于等于x的最小的整数值,如果x是一个整数,则返回x
    copysign #把y的正负号加到x前面,可以使用0
    cos #求x的余弦,x必须是弧度
    degrees #把x从弧度转换成角度
    e #表示一个常量
    exp #返回math.e,也就是2.71828的x次方
    expm1 #返回math.e的x(其值为2.71828)次方的值减1
    fabs #返回x的绝对值
    factorial #取x的阶乘的值
    floor #取小于等于x的最大的整数值,如果x是一个整数,则返回自身
    fmod #得到x/y的余数,其值是一个浮点数
    frexp #返回一个元组(m,e),其计算方式为:x分别除0.5和1,得到一个值的范围
    fsum #对迭代器里的每个元素进行求和操作
    gcd #返回x和y的最大公约数
    hypot #如果x是不是无穷大的数字,则返回True,否则返回False
    isfinite #如果x是正无穷大或负无穷大,则返回True,否则返回False
    isinf #如果x是正无穷大或负无穷大,则返回True,否则返回False
    isnan #如果x不是数字True,否则返回False
    ldexp #返回x*(2**i)的值
    log #返回x的自然对数,默认以e为基数,base参数给定时,将x的对数返回给定的base,计算式为:log(x)/log(base)
    log10 #返回x的以10为底的对数
    log1p #返回x+1的自然对数(基数为e)的值
    log2 #返回x的基2对数
    modf #返回由x的小数部分和整数部分组成的元组
    pi #数字常量,圆周率
    pow #返回x的y次方,即x**y
    radians #把角度x转换成弧度
    sin #求x(x为弧度)的正弦值
    sqrt #求x的平方根
    tan #返回x(x为弧度)的正切值
    trunc #返回x的整数部分

random模块