《Python学习之路 -- Python基础之模块与包》
与其他脚本语言相似,在Python中也有模块和包的概念,在JavaScript中,一个js文件就是一个模块,有package.json文件的目录就是包;相似的,在Python中,通俗的说,一个py文件就是一个模块,拥有__init__.py的目录就是一个包,更准确的说,一个包可以包含多个模块,也就是说,多个模块组成了一个包。模块又可以分为:内置模块(标准库)、第三方模块和自定义模块。
一个模块可以包含可执行的语句和函数的定义,这些语句的目的就是初始化模块,它们在该模块首次被导入时执行。导入模块有两种方式:import 和 from ... import ... (可以使用as关键字对模块进行重命名)
导入注意事项:
1、不管使用哪种方式导入模块,被导入的模块所有语句都会执行
2、可以在程序的任意位置导入模块,但是需要注意命名空间的问题,首次导入时,解释器会为模块创建新的命名空间,但如果在同一个py文件的其他地方重复导入相同的模块,则会继续使用已经开辟的内存空间,而不是开辟新的内存。
3、模块的查找顺序: 内存中已经加载的模块 —— 内置模块 —— sys.path路径中包含的模块
4、当执行一个脚本(py文件)时,解释器会将这个文件所在的目录加到sys.path路径中
1、time 模块
①时间戳
import time # 时间戳:从1970年1月1日0时到当前的时间,单位:秒 time.time()
②结构化时间
import time # t是当前的时间对象 t = time.localtime() # 时间对象里面包含了当前的时间属性,比如: # 当前的年份 tm_year # 当前的月份 tm_mon # 当前的日期 tm_mday # 当前的整点 tm_hour # 当前的分钟 tm_min # 当前的秒数 tm_sec # 当前是星期几,0表示星期一 tm_wday # 当天是今年的的多少天 tm_yday
除了localtime之外,还可以通过 time.gmtime()获取UTC标准时间
内置字符串时间
# 参数默认为当前的格式化时间 time.asctime() # 参数默认为当前的时间戳时间 time.ctime() # 默认情况下两个方法返回的结果一致
将结构化时间转为时间戳
import time # time.mktime(格式化时间) time.mktime(time.localtime())
将结构化时间转为字符串时间
import time # time.strftime(字符串格式化,格式化时间) time.strftime('%Y-%m-%d %X',time.localtime()) # 字符串格式化中,%Y表示年份,%m表示月份,%d表示天,%X表示时分秒,它们之间的分隔符可以自定义
将字符串时间转为结构化时间
import time # time.strptime(字符串时间,格式化时间) time.strptime(‘2018-5-4 13:49:36’,‘%Y-%m-%d %X’)
③延迟执行
import time # time.sleep(延迟的秒数) time.sleep(1)
2、random 模块
import random # 生成一个0到1的随机浮点数 random.random() # 生成一个1到10(包括1和10)的随机整数 random.randint(1,10) # 生成一个1到10(不包括10)的随机整数 random.randrange(1,10) # 随机选取一个可转为可迭代对象中的数据 random.choice([11,22,33]) # 随机选取一个或多个可转为可迭代对象中的数据 random.sample([11,22,33,44],2) # 2表示选取两个 # 随机选取一个指定范围中的浮点数 random.uniform(1,3) # 打乱一个集合中数据的次序 random.shuffle([2,3,5,1,4])
3、os 模块
import os # 获取当前python脚本的目录 os.getcwd() # 改变当前工作目录,相当于shell里面的cd os.chdir() # 生成多层递归目录 os.makedirs('dirname1/dirname2') # 递归删除目录,若目录为空,则删除,并递归到上一级目录,如果也是空,则继续删除 os.removedirs('dirname') # 创建一个目录 os.mkdir('dirname') # 删除单据空目录,如果目录不为空则无法删除 os.rmdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件 os.listdir(path) # 删除一个文件 os.remove(path) # 重命名文件或目录 os.rename() # 读取文件的状态,包括文件的大小,创建时间,修改时间,上次访问时间等信息 os.stat(path) # 输出操作系统特定的路径分隔符,windows下为\\,linux下为/ os.sep() # 输出当前平台使用的行终止符,windows下为\r\n,linux下为\n os.linesep() # 输出用于分隔文件路径的字符串,windows下为分号; , linux下为冒号: os.pathsep() # 获取系统环境变量 os.environ() # 将path分隔成目录和文件名二元组返回 os.path.split(path) # 返回path目录 os.path.dirname(path) # 返回path最后的文件名 os.path.basename(path) # 将多个路径组合并返回 os.path.join(path1,path2) # 返回path所指向的文件或目录的最后存取时间 os.path.getatime(path) # 返回path所指向的文件或目录的最后修改时间 os.path.getmtime(path)
4、sys 模块
import sys # 返回模块搜索路径 sys.path() # 返回操作哦系统平台名称 sys.platform() # 退出程序 sys.exit() # 获取Python解释器的版本信息 sys.version() # 列出所有参数 sys.agrv() # 立即刷新 sys.stdout.flush() #向终端写入内容 sys.stdout.write(str)
5、json 模块
import json # 将其他数据类型转为json字符串 json.dumps() # 将json字符串转为其他数据类型 json.loads()
6、pickle 模块
import pickle # 将其他数据类型转为对应的字节 pickle.dumps() # 将字节转为其他数据类型 pickle.loads()
7、xml 模块
import xml.etree.ElementTree as ET # 读取xml文件,返回文件对象 tree = ET.parse('xxxx.xml') # 获取xml中的根标签,可遍历 root = tree.getroot() for i in root: # 获取标签名 print(i.tag) # 获取标签属性,返回一个字典 print(i.attrib) # 获取标签体 print(i.text)
8、re 模块
常用匹配模式: \w 匹配字母、数字以及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符 \S 匹配任意非空白字符 \d 匹配任意数字 \D 匹配任意非数字字符 \A 匹配字符串开始 \Z 匹配字符串结束 \G 匹配最后匹配完成的位置 \n 匹配一个换行符 \t 匹配一个制表符 ^ 匹配字符串开头 $ 匹配字符串结尾 . 匹配一个任意字符,换行符除外 [abc] 表示一组字符,匹配a或b或c [^abc] 匹配除了a,b,c之外的字符 * 匹配0个或多个表达式 + 匹配1个或多个表达式 ? 匹配0个或1个前面的字符 {n} 精确匹配n个前面的表达式 {n,m} 匹配n到m次由前面的正则表达式定义的片段 a | b 匹配a或b () 匹配括号内的表达式
[a-z] 匹配所有小写字母
[A-Z] 匹配所有大写字母
[a-Z] 匹配所有字母
[0-9] 匹配数字
\ 转义字符
注意:在字符集[ ]中没有特殊符号,除了 ‘-’ ,‘/’ 和 ‘\’
import re # 根据正则表达式reg匹配目标字符串target,结果返回一个列表 re.findall(reg,target) # 只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None re.search(reg,target)
9、logging 模块
import logging # 默认级别是warning,默认打印到终端上 logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') # 通过logging.basicConfig()函数可以为改变logging模块的默认行为,可用参数: filename:用指定的文件创建FileHandler,这样日志会被存储在指定的文件中 filemode:文件的打开方式,在指定filename时使用这个参数,默认值为'a'表示追加,可以指定为'w'覆盖 format:指定handler使用的日志显示格式 datefmt:指定日期时间格式 level:设置rootlogger的日志级别 格式化: %(name)s:Logger的名字,并非用户名,详细查看 %(levelno)s:数字形式的日志级别 %(levelname)s:文本形式的日志级别 %(pathname)s:调用日志输出函数的模块的完整路径名,可能没有 %(filename)s:调用日志输出函数的模块的文件名 %(module)s:调用日志输出函数的模块名 %(funcName)s:调用日志输出函数的函数名 %(lineno)d:调用日志输出函数的语句所在的代码行 %(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示 %(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数 %(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(thread)d:线程ID。可能没有 %(threadName)s:线程名。可能没有 %(process)d:进程ID。可能没有 %(message)s:用户输出的消息
(未完,待续)