第十章 python 常见模块

python 常见模块

一、sys模块

1. sys模块的作用

sys模块代表了python解释器,主要用于获取和python解释器相关的信息。
[e for r in dir(sys) if not e.startswith(’_’)]

2. sys模块的参考页面:

https://docs.python.org/3/library/sys.html

3. sys模块中常用的属性和函数:

  • sys.argy:获取运行Python程序的命令行参数。argv属性值是一个列表
    其中sys.argv[0]通常就是指该Python程序,
    sys.argv[l]代表为Python程序提供的第一个参数,
    sys.argv[2]代表为Python程序提供的第二个参数……依此类推。
  • sys.byteorder:显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回big;否则返回little。
  • sys.copyright:该属性返回与Python解释器有关的版权信息。
  • sys.executable:该属性返回Python解释器在磁盘上的存储路径。
  • sys.exit():通过引发SystemExit异常来退出程序。将其放在try块中不能阻止finally块的执行。
  • 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.modules:返回模块名和载入模块对应关系的字典。
  • sys.path:该属性指定Python査找模块的路径列表。程序可通过修改该属性来动态增加Python加载模块的路径。
  • sys.platform:返回Python解释器所在平台的标识符。
  • sys.stdin:返回系统的标准输入流—— 一个类文件对象。
  • sys.stdout:返回系统的标准输出流—— 一个类文件对象。
  • sys.stderr:返回系统的错误输出流—— 一个类文件对象。
  • sys.version:返回当前Python解释器的版本信息。
  • sys.winver:返回当前Python解释器的主版本号。

二、os模块

1. os模块的作用

os模块代表了程序所在的操作系统,主要用于获取程序运行所在操作系统的相关信息。
os.__all__命令

2. os模块的参考页面:

https://docs.python.org/3/library/os.html

3. os模块中常用的属性和函数:

  • os.name:返回导入依赖模块的操作系统名称,通常可返回,‘posix’、‘nt’、‘java’等值其中之一。
  • os.environ:返回在当前系统上所有环境变量组成的字典。
  • os.fsencode(filename):该函数对类路径(path-like)的文件名进行编码。
  • os.fedecode(filename):该函数对类路径(path-like)的文件名进行解码。
  • os.PathLike:这是一个类,代表一个类路径(path-like)对象。
  • os.getenv(key, default=None):获取指定环境变量的值。
  • os.getlogin():返回当前系统的登录用户名。与该函数对应的还有os.getuid()、os.getgroups()、os.getgid()等函数,用于获取用户ID、用户组、组ID等,这些函数通常只在UNIX系统上有效。
  • os.getpid():获取当前进程ID。
  • os.getppid():获取当前进程的父进程ID。
  • os.putenv(key, value):该函数用于设置环境变量。
  • os.cpu_count():返回当前系统的CPU数量。
  • os.sep:返回路径分隔符。
  • 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模块下与进程管理相关的函数如下。

  • os.abort():生成一个SIGABRT信号给当前进程。在UNIX系统上,默认行为是生成内核转储;在Windows系统上,进程立即返回退出代码3。
  • os.execl(path, arg0, argl, …):该函数还有一系列功能类似的函数,比如 os.execle()、os. execlp()等,这些函数都是使用参数列表argO,argl,…来执行path所代表的执行文件的。
  • os.fbrkpty(): fbrk—个子进程。
  • os.kill(pid, sig):将sig信号发送到pid对应的过程,用于结束该进程。
  • os.killpg(pgid, sig):将sig信号发送到pgid对应的进程组。
  • os.popen(cmd, mode=‘r’, buffering=-1):用于向cmd命令打开读写管道(当mode为r时为只读管道,当mode为rw时为读写管道),buffering缓冲参数与内置的open。函数有相同的含义。该函数返回的文件对象用于读写字符串,而不是字节。
  • os.spawnl(mode, path, …):该函数还有一系列功能类似的函数,比如 os.spawnle()、os.spawnlp()等,这些函数都用于在新进程中执行新程序。
  • os.startfile(path[, operation]):对指定文件使用该文件关联的工具执行operation对应的操作。如果不指定operation操作,则默认执行打开(open)操作。operation参数必须是有效的命令行操作项目,比如open (打开)、edit (编辑)、print (打印)等。
  • os.system(command):运行操作系统上的指定命令。

三、random模块

1. random模块的作用

random模块主要包含生成伪随机数的各种功能变量和函数。
random.__all__命令

2. random模块的参考页面:

https://docs.python.org/3/library/random.html

3. random模块中常用的属性和函数:

  • random.seed(a=None, version=2):指定种子来初始化伪随机数生成器。
  • random.randrange(start, stop[, step]):返回从 start 开始到 stop 结束、步长为 step 的随机数。其实就相当于choice(range(start, stop, step))的效果,只不过实际底层并不生成区间对象。
  • random.randint(a, b):生成一个范围为a≤N≤b的随机数。其等同于randrange(a, b+1)的效果。
  • random.choice(seq):从seq中随机抽取一个元素,如果seq为空,则引发IndexError异常。
  • random.choices(seq, weights=None, *, cum_weights=None, k=1):从 seq 序列中抽取 k 个元素,还可通过weights指定各元素被抽取的权量(代表被抽取的可能性高低)。
  • random.shuffle(x[, random]):对x序列执行洗牌“随机排列”操作。
  • random.sample(population, k):从population序列中随机抽取k个独立的元素。
  • random.random():生成一个从0.0 (包含)到1.0 (不包含)之间的伪随机浮点数。
  • random.unifbrm(a, b):生成一个范围为a≤N≤b的随机数。
  • random.expovariate(lambd):生成呈指数分布的随机数。其中lambd参数(其实应该是lambda,只是lambda是Python关键字,所以简写成lambd)为1除以期望平均值。如果lambd是正值,则返回的随机数是从0到正无穷大;如果lambd为负值,则返回的随机数是从负无
    穷大到0。

四、time模块

1. time模块的作用

time模块主要包含各种提供日期、时间功能的类和函数。该模块既提供了把日期、时间格式化为字符串的功能,也提供了从字符串恢复日期、时间的功能。
[e for r in dir(time) if not e.startswith(’_’)]

2. time模块的参考页面:

https://docs.python.org/3/library/time.html

3. time模块中常用的属性和函数:

time.struct_time类中各属性的含义:

字段名 字段含义
tm_year 如2017、2018等
tm_mom 如2、3等,范围为1~12
tm_mday 如2、3等,范围为1~12
tm_hour 如2、3等,范围为1~12
tm_min 如2、3等,范围为1~12
tm_sec 如2、3等,范围为1~12
tm_wday 周一为0,范围为0~6
tm_yday 一年内第几天 如65,范围为1~366
tm_isdst 夏令时 0、1或-1

比如,Python 可以用 time.struct_time(tm_year=2018, tm_mon=5, tm_mday=2, tm_hour=8,tm_min=0, tm_sec=30, tm_wday=3, tm_yday=1, tm_isdst=0)很清晰地代表时间。
此外,Python还可以用一个包含9个元素的元组来代表时间,该元组的9个元素和struct_time对象中9个属性的含义是一一对应的。比如程序可以使用(2018,5,2, 8,0,30,3, 1,0)来代表时商。

在日期、时间模块内常用的功能函数如下。

  • 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:返回本地时区的名字。

代码如下:

# 生命时间,假如活到90岁
import time

starttimes = (1990, 6, 23, 0, 0, 0, 0, 0, 0)
endtimes = (2080, 6, 23, 0, 0, 0, 0, 0, 0)

# 出生日期,"1990年6月23日"
starttime = time.mktime(starttimes)
# 当面时间
nowtime = time.strftime('%Y年%m年%d日 %H时%M分%S秒',time.localtime(time.time()))
# 已度时光(荒废),秒数

overtime = time.time() - starttime
# 时间尽头(90岁),"2080年6月23日"
endtime = time.mktime(endtimes)
# 剩余时间(奋斗),年、月、日、时、分、秒
# 秒
futuretimes = endtime - time.time()
# 分
futuretimeM = futuretimes//60
# 时
futuretimeh = futuretimeM//60
# 天
futuretimed = futuretimeh//24
# 周
futuretimew = futuretimed//7
# 月
futuretimem = futuretimew//4.34
# 年
futuretimey = futuretimem//12

print(nowtime)
print(overtime)
print(('%s秒') % int(futuretimes))
print(('%s分') % int(futuretimeM))
print(('%s时') % int(futuretimeh))
print(('%s天') % int(futuretimed))
print(('%s周') % int(futuretimew))
print(('%s月') % int(futuretimem))
print(('%s年') % int(futuretimey))


# 遗留问题,加单位,参考P86练习

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 上午或下午的本地化方式。当使用strptimeO函数并使用%1指令解析小时时,%p只影响小时字段
%S 代表分钟的数值,范围:00-61,该范围确实是00~61, 60在表示闰秒的时间戮时有效,而61则是由于一些
历史原因造成的
%U 代表一年中第几周,以星期天为每周的第一天,范围:00~53。在这种方式下,一年中第一个星期天被认为处
于第一周。当使用stiptime()函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效
%w 代表星期几的数值,范围:0~6,其中0代表
%W 代表一年中第儿周,以星期一为每周的第一天,范围:00-53。在这种方式下,一年中第一个星期-被认为处
于第一周。当使用strptime()函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效
%x 本地化的日期的表示形式
%X 本地化的日期的表现形式
%y 年份的缩写,范围:00~99,比如2018年就简写就好了
%Y 年份的完整形式,如2018
%z 显示时区偏移
%Z 时区名(如果时区不存在,则显示的空)
%% 用于代表%符号

五、JSON支持

1. JSON模块的作用

JSON是一种轻量级、跨平台、跨语言的数据交换格式,JSON格式被广泛应用于各种语言的
数据交换中。
json.__all __

2. JSON的基本知识

JSON 的全称是 JavaScript Object Notation。

JSON主要有如下两种数据结构。

  • 由key-value对组成的数据结构。这种数据结构在不同的语言中有不同的实现。例如,在
    JavaScript中是一个对象;在Python中是一•种diet对象;在C语言中是一个struct;在其他
    语言中,则可能是 record、dictionary、hash table 等。
  • 有序集合。这种数据结构在Python中对应于列表;在其他语言中,可能对应于list、vector.
    数组和序列等。
(1)使用JSON语法创建对象

语法格式:
var a = { key1 : value1, key2: value2,…}

(2)使用JSON语法创建数组

语法格式:
var a = [value1, value2,…]

3. python的JSON支持

(1)JSON类型转换为python类型的对应关系
JSON类型 python类型
对象(object) 字典(dict)
数组(array) 列表(list)
字符串(string) 字符串(str)
整数(number(int)) 整数(int)
实数(number(real)) 浮点数(float)
true True
false False
null None
(2)python类型转换为JSON类型的对应关系
python类型 JSON类型
字典(dict) 对象(object)
列表(list)和元组(tuple) 数组(array)
字符串(str) 字符串(string)
整数、浮点数、以及整型、浮点型派生的枚举(float,int-&float-derived Enums) 整数(number)
实数(number(real)) 浮点数(float)
True true
False false
None null

4. JSON模块中常用的属性和函数:

  • json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan= True,
    cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):将 obj 对象
    转换成JSON字符串输出到fp流中,币是一个支持write()方法的类文件对象。
  • json.dumps(obj, * , skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan= True,
    cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):将 obj 对象
    转换为JSON字符串,并返回该JSON字符串。
  • json.Ioad(fp,* , cls=None, object_hook=None, parse_float=None, parse_int=None, parse_
    constant=None, object_pairs_hook=None, **kw):从fp流读取 JSON 字符串,将其恢复成 JSON对象,其中fp是一个支持write()方法的类文件对象。
  • json.loads(s, * , encoding=None, cls=None, object_hobk=None, parse_float=None, parse_
    int=None, parse_constant=None, object_pairs_hook=None, **kw):将 JSON 字符串 s 恢复成
    JSON对象。

5. JSON主要应用场景

decode(用load或loads)
JSON字符串→python对象

encode(用dump或dumps)
python对象→JSON字符串

dumps()和dump()函数的encode操作(将Python对象转换成JSON字符串)

代码如下:

import json
# 将Python对象转JSON字符串(元组会当成数组)
s = json.dumps(['yeeku', {
   'favorite': ('coding', None, 'game', 25)}])
print(s) # ["yeeku", {"favorite": ["coding", null, "game", 25]}]
# 简单的Python字符串转JSON
s2 = json.dumps("\"foo\bar")
print(s2) #"\"foo\bar"
# 简单的Python字符串转JSON
s3 = json.dumps('\\')
print(s3) #"\\"
# Python的dict对象转JSON,并对key排序
s4 = json.dumps({
   "c": 0, "b": 0, "a": 0}, sort_keys=True)
print(s4) #{"a": 0, "b": 0, "c": 0}
# 将Python列表转JSON,
# 并指定JSON分隔符:逗号和冒号之后没有空格(默认有空格)
s5 = json.dumps([1, 2, 3, {
   'x': 5, 'y': 7}], separators=(',', ':'))
# 输出的JSON字符串中逗号和冒号之后没有空格
print(s5) # '[1,2,3,{"4":5,"6":7}]'
# 指定indent为4,意味着转换的JSON字符串有缩进
s6 = json.dumps({
   'Python': 5, 'Kotlin': 7}, sort_keys=True, indent=4)
print(s6)
# 使用JSONEncoder的encode方法将Python转JSON
s7 = json.JSONEncoder().encode({
   "names": ("孙悟空", "齐天大圣")})
print(s7) # {"names": ["\u5b59\u609f\u7a7a", "\u9f50\u5929\u5927\u5723"]}
f = open('a.json', 'w')
# 使用dump()函数将转换得到JSON字符串输出到文件
json.dump(['Kotlin', {
   'Python': 'excellent'}], f)

sort_keys:排序,(sort_keys=True)
indent:缩进,(indent=4)
separators:没有空格(separators=(’,’, ‘:’))

loads()和load()函数的decode操作(将JSON字符串转换成Python对象)。

代码如下:

import json
# 将JSON字符串恢复成Python列表
result1 = json.loads('["yeeku", {"favorite": ["coding", null, "game", 25]}]')
print(result1) # ['yeeku', {'favorite': ['coding', None, 'game', 25]}]
# 将JSON字符串恢复成Python字符串
result2 = json.loads('"\\"foo\\"bar"')
print(result2) # "foo"bar
# 定义一个自定义的转化函数
def as_complex(dct):
    if '__complex__' in dct:
        return complex(dct['real'], dct['imag'])
    return dct
# 使用自定义的恢复函数
# 自定义回复函数将real数据转成复数的实部,将imag转成复数的虚部
result3 = json.loads('{"__complex__": true, "real": 1, "imag": 2}',\
    object_hook=as_complex)
print(result3) # (1+2j)
f = open('a.json')
# 从文件流恢复JSON列表
result4 = json.load(f)
print(result4) # ['Kotlin', {'Python': 'excellent'}]

六、正则表达式(re模块)

1. 正则表达式的作用

正则表达式(Regular Expression)用于描述一种字符串匹配的模式(Pattern),它可用于检査一个字符串是否含有某个子串,也可用于从字符串中提取匹配的子串,或者对字符串中匹配的子串执行替换操作。

2. 正则表达式支持

re.__all __

(1)re.compile(pattern, flags=0)

该函数用于将正则表达式字符串编译成_sre.SRE_Pattem对象,该对象代表了正则表达式编译之后在内存中的对象,它可以缓存并/用正则尾达式字符串。如果程序需要多次使用同一个正则表达式字符串,则可考虑先编译它。
该函数的partem参数就是它所编译的正则表达式字符串,flags则代表了正则表达式的匹配旗
标。

(2)re.match(pattern, string, flags=0)

尝试从字符串的开始位置来匹配正则表达式,如果从开始
位置匹配不成功,match。函数就返回None。其中pattern参数代表正则表达式;string代表
被匹配的字符串;flags则代表正则表达式的匹配旗标。该函数返回_sre.SRE_Match

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值