Python基础之常用内置模块
承蒙大家厚爱,我的《Go语言之路》的纸质版图书已经上架京东,有需要的朋友请点击 此链接 购买。
本文介绍了Python中常用的那些内置模块。
Python本身就内置了很多非常有用的模块,只要安装完Python,这些模块就可以立刻使用。
本文这里主要介绍几个常用的内置模块。
time
在Python中,通常有以下几种表示时间的方式:
- 时间戳(time stamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
- 格式化的时间字符串(format string)
- 结构化的时间(struct time):struct time是一个包含9个元素的元祖,具体是(年, 月, 日, 时, 分, 秒, 一年中第几周,一年中第几天,夏令时)
索引 | 属性 | 值 |
---|---|---|
0 | tm_year(年) | 例如:2017 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 61 |
6 | tm_wday(weekday) | 0 - 6(0表示周一) |
7 | tm_yday(一年中第几天) | 1 - 366 |
8 | tm_isdst(是否夏令时) | 0, 1或-1 |
>>> import time
>>> time.time()
1499065636.763414 # 时间戳
>>> time.strftime("%Y-%m-%d %X")
'2017-07-03 15:08:00' # 格式化的时间字符串
>>> time.localtime()
# 本地时区的struct time
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=15, tm_min=8, tm_sec=17, tm_wday=0, tm_yday=184, tm_isdst=0)
>>> time.gmtime()
# UTC时区的struct time
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=7, tm_min=8, tm_sec=28, tm_wday=0, tm_yday=184, tm_isdst=0)
计算机只能认识时间戳格式的时间,人类能够认识格式化的时间字符串和结构化的时间,他们之间的转换关系如下图:
具体的转换示例:
time stamp —> struct time
- localtime([secs]): 将一个时间戳转换成当前时区的struct time。secs是可选的,默认值为当前时间戳。
>>> import time >>> time.localtime() time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=18, tm_min=13, tm_sec=56, tm_wday=0, tm_yday=184, tm_isdst=0) >>> time.localtime(1499076846.5924811) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=3, tm_hour=18, tm_min=14, tm_sec=6, tm_wday=0, tm_yday=184, tm_isdst=0)
- gmtime([secs]):类似于localtime(),将时间戳转换成UTC 0时区的struct time。
struct time —> time stamp
mtkime(t):将一个结构化的时间转换成时间戳。
>>> time.mktime(time.localtime()) 1499077239.0
format time —> struct time
time.strptime(string[, format]):将格式化的时间字符串转换成结构化的时间格式。
>>> time.strptime('2013-07-25 08:30:00', '%Y-%m-%d %X') time.struct_time(tm_year=2013, tm_mon=7, tm_mday=25, tm_hour=8, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=206, tm_isdst=-1)
struct time —> format time
time.strftime(format[, t]):将结构化的时间格式转换成格式化的时间字符串。
>>> time.strftime("%Y-%m-%d %X", time.localtime()) '2017-07-03 18:26:28'
**注意:**format的默认格式是:"%a %b %d %H:%M:%S %Y"。
补充:
>>> time.ctime(0) # 将时间戳转换成格式化时间字符串
'Thu Jan 1 08:00:00 1970'
>>> time.ctime(time.time())
'Mon Jul 3 19:06:36 2017'
>>> time.asctime(time.localtime()) # 将结构化时间格式转换成格式化时间字符串
'Mon Jul 3 19:07:05 2017'
>>> time.sleep(3) # 推迟调用线程的运行3秒
random
random
模块内置方法如下:
>>> import random # 导入random模块
>>> random.random() # 大于0且小于1之间的小数
0.8750057174854188
>>> random.randint(1, 3) # 大于等于1且小于等于3之间的整数
1
>>> random.randrange(1, 3) # 大于等于1且小于3之间的整数
2
>>> random.choice(["Alex", "Seven", "Andy"]) # 从中随机选一个元素
'Andy'
>>> random.sample(["Alex", "Seven", "Andy"], 2) # 从中随机选两个元素组合
['Andy', 'Alex']
>>> random.uniform(1, 3) # 大于1且小于3的小数
1.2757284469135628
>>> list1 = [1, 2, 3, 4, 5]
>>> random.shuffle(list1) # 打乱顺序,类似于洗牌
>>> list1
[4, 3, 1, 5, 2]
关于random
的一个小练习,写一个生成4位随机验证码(包含数字和字母)的小程序:
import random
def get_code(n):
"""
生成指定位数的随机验证码,包含数字和字母
:param n: 随机验证码位数
:return:
"""
code = ""
for i in range(n): # 循环n次
number = random.randint(0, 9) # 生成数字
letter = chr(random.randint(65, 90)) # 利用chr将数字转成字符
aim = random.choice([number, letter]) # 从数字和字符中选一个
code += str(aim) # 将每一次循环得到的结果拼接起来
return code
if __name__ == '__main__':
ret = get_code(4)
print(ret)
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.environ 获取系统环境变量
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的大小
sys
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
json
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi"
# Date: 2016/11/20
"""
Python3 JSON模块的使用
参考链接:https://docs.python.org/3/library/json.html
这里只是介绍最常用的dump、dumps和load、loads
"""
import json
# 自定义了一个简单的数据(Python中的字典类型),要想Python中的字典能够被序列化到json文件中请使用双引号!双引号!双引号!
data_obj = {
"北京市": {
"朝阳区": ["三里屯", "望京", "国贸"],
"海淀区": ["五道口", "学院路", "后厂村"],
"东城区": ["东直门", "崇文门", "王府井"],
},
"上海市": {
"静安区": [],
"黄浦区": [],
"虹口区": [],
}
}
# ---------------------------------------------------分割线------------------------------------------------------------
"""
dumps:序列化一个对象
sort_keys:根据key排序
indent:以4个空格缩进,输出阅读友好型
ensure_ascii: 可以序列化非ascii码(中文等)
"""
s_dumps = json.dumps(data_obj, sort_keys=True, indent=4, ensure_ascii=False)
print(s_dumps)
# ---------------------------------------------------分割线------------------------------------------------------------
"""
dump:将一个对象序列化存入文件
dump()的第一个参数是要序列化的对象,第二个参数是打开的文件句柄
注意打开文件时加上以UTF-8编码打开
* 运行此文件之后在同级目录下会有一个data.json文件,打开之后就可以看到保存到文件中的json数据是什么格式
"""
with open("data.json", "w", encoding="UTF-8") as f_dump:
s_dump = json.dump(data_obj, f_dump, ensure_ascii=False, indent=4)
print(s_dump)
# ---------------------------------------------------分割线------------------------------------------------------------
"""
load:从一个打开的文件句柄加载数据
注意打开文件的编码
"""
with open("data.json", "r", encoding="UTF-8") as f_load:
r_load = json.load(f_load)
print(r_load)
# ---------------------------------------------------分割线------------------------------------------------------------
"""
loads: 从一个对象加载数据
"""
r_loads = json.loads(s_dumps)
print(r_loads)
arg = '{"bakend": "www.oldboy.org", "record": {"server": "100.1.7.9", "weight": 20, "maxconn": 30}}'
a = json.loads(input('请输入添加的数据:'), encoding='utf-8') # input输入上面的字符串(去掉单引号)
print(a)