第四章、常用模块
(一)、os模块
os.getcwd()#python解释器路径
os.terminal_size() #获取终端尺寸大小
os.listdir('E:\Code')#查看指定目录下的文件
os.removedirs()#删除多个目录
os.remove()#删除文件
#判断是否为文件
os.path.isfile()
#判断是否为目录
os.path.isdir()
#判断是否为绝对路径
print(os.path.isabs('E:\Code'))
#判断是否文件或目录存在
print(os.path.exists('E:\Code'))
#分割文件名和路径
print(os.path.split('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#分割文件后缀
print(os.path.splitext('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#分割文件或目录所在磁盘
print(os.path.splitdrive('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#获取文件所在目录
print(os.path.dirname('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#获取绝对路径名
print(os.path.abspath('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#获取文件名
print(os.path.basename('E:\Code\PyCharm\Luf\Chapter04\my_os.py'))
#运行shell命令,返回0为执行正确,非0表示执行错误
os.system()
#读取环境变量为HOME的值
os.getenv('HOME')
#获取操作系统所有环境变量
os.environ
#设置系统环境变量,有则返回,无则创建,只在当前terminal下有效,即当前程序
os.environ.setdefault('HOME','/home/ya')
#当前平台使用的行终止符
os.linesep
#获取当前系统平台
os.name
#重命名
os.rename('old','new')
#创建多级目录
os.makedirs('C:\python\os\mkdirs')
#创建单个目录
os.mkdir()
#获取文件属性
os.stat('E:\Code\PyCharm\Luf\Chapter04\my_os.py')
#修改文件权限与时间戳
os.chmod('E:\Code\PyCharm\Luf\Chapter04\my_os.py',777)
#获取文件大小
os.path.getsize()
#结合目录名与文件名
os.path.join()
#改变工作目录
os.chdir()
#获取当前终端大小
os.get_terminal_size()
#终止当前进程,py3已无改方法
os.exit()
#杀死进程
os.kill()
(二)、sys模块
#接收参数,传参数给脚本
sys.argv()
#退出程序,
sys.exit(0)
#python版本
sys.version
#int最大值
sys.maxsize()
#python模块搜索路径
sys.path()
#当前系统版本
sys.pltform()
#标准输出
sys.stdout()
#标准输入
sys.stdin.readline()[:-1]
#获取递归最大层数
sys.getrecursionlimit()
#设置递归最大层数
sys.setrecursionlimit(120)
#获取解释器默认编码
sys.getdefaultencoding()
#获取内存数据存到文件里的默认编码
sys.getfilesystemencoding()
(三)、time模块
local_time=time.localtime()#获取当前本地时间(北京时间)
# local_time.tm_year 年
# local_time.tm_mon 月
# local_time.tm_mday 日
# local_time.tm_hour 时
# local_time.tm_min 分
# local_time.tm_sec 秒
# local_time.tm_wday weekday
# local_time.tm_yday 一年中的第几天
# local_time.tm_isdst 是否为夏时令
time.time()#获取当前时间戳
time.gmtime()#类似localtime,将是一个时间戳转换为UTC时区
time.mktime(t)#将一个struct_time转换为时间戳
time.sleep()#将线程推迟指定时间,单位为秒
time.asctime()#把一个表示时间的元组或者struct_time表示为'Sun Oct 1 12:04:49 2017'格式,没有参数则将time.localtime()传入
time.ctime()#把一个时间戳转换为time.asctime()形式,如果参数未给或为None时,将time.time()作为参数,先当于time.asctime(time.localtime(sec))
time.strftime()#把一个表示时间的元组或者struct_time转化为格式化的时间字符串,未指定则将time.localtime()传入
time.strptime()#把一个格式化时间字符串转换为struct_time,即将strftime()逆操作
(四)、datetime模块
import datetime
"""
datetime.date#表示日期类,属性有year、month、day
datetime.time#表示时间类,常用属性有hour、minute、second、microsecond
datetime.datetime#表示日期时间
datetime.timedelta#表示时间间隔
datetime.tzinfo#与时区有关信息
d=datetime.datetime.now()#返回当前的datetime日期类型
d.timestamp()
d.today()
d.year
d.timetuple()
datetime.date.fromtimestamp()#把一个时间戳转换为datetime日期类型
"""
#时间替换
d=datetime.datetime.now()
print(d)
d=d.replace(year=2017)
print(d)
(五)、random模块
import random
random.randint(1,100)#取x,y之间的随机数,包含起始值
random.randrange(1,100)#取x,y之间的随机数,不包含起始值
random.random()#随机浮点数
random.choice('aaabbccc')#从字符串中返回随机字符
random.sample('aaaa',3)#从字符串中返回指定数量的字符
random.shuffle("123456abc")#打乱字符串
#生成随机字符串
import string
''.join(random.sample(string.ascii_lowercase+string.digits+string.punctuation,16))
(六)、shutil模块
import shutil
#将文件对象内容拷贝到另一个文件对象中
f1=open('my_os.py','rb')
f2=open('my_os_new.py','wb')
shutil.copyfileobj(f1,f2)
f1.close()
f2.close()
#拷贝文件
shutil.copyfile()
#仅拷贝权限,内容和组都不变
shutil.copymode()
#拷贝状态信息,包括mode bits,atime,mtime,flags
shutil.copystat()
#拷贝文件和权限
shutil.copy()
#拷贝文件和状态信息
shutil.copy2()
#拷贝文件目录
shutil.copytree()
#拷贝指定类型文件
# shutil.ignore_patterns('*.pyc')忽略的文件,有则报错
shutil.copytree('s','d',shutil.ignore_patterns('*.pyc'))
#删除目录,ignore_errors忽略错误
shutil.rmtree('path',ignore_errors=True)
#递归式移动,重命名,剪切
shutil.move()
#压缩打包
shutil.make_archive()
#base_name:压缩包的文件名,也可以是路径,只是文件名则保存到当前目录,否则保存到指定路径
#format:压缩包类型,zip,tar,bztar,gztar
#root_dir:要压缩的文件夹路径,默认为当前目录
#owner:用户,默认当前用户
#group:组,默认为当前组
#logger:用于记录日志,通常为logging.Logger对象
#解压
shutil.unpack_archive()
#filename:解压的文件名
#extract_dir:解压到指定路径
#format:压缩包格式
import zipfile
z=zipfile.ZipFile("test.zip",'w')
z.write('test.py')
z.write('my_shutil.py')
z.close()
(七)、序列化模块
把内存中的数据通过网络共享给别人
把内存中的数据存入硬盘。json和pickle只能dump和load一次。
1、json只能序列化str,int,tuple,list,dict。跨平台,跨语言
定义了不同语言之间的交互规则,数据简洁
import json
#序列化,可dump多次,但数据会损坏
json.dump(obj=None,fp='fileobj')#变成字符串并存入到文件对象
json.dumps(obj=None)#将对象变成字符串赋值给变量,即存入内存。可写入硬盘或可通过网络发送。可以跨平台跨语言共享数据
#反序列化,只能load一次
json.load()#从文件对象中加载数据
json.loads()#将字符串转换成相应类型
处理非表准json数据时,可以使用https://pypi.org/project/demjson/
2、pickle支持python里所有数据类型,只能在python中使用
import pickle
pickle.dump(data,file_obj)#二进制模式写入文件
pickle.dumps()#转换成二进制数据
pickle.load()#从pkl文件中加载成对象
pickle.loads()
3、shelve,对pickle封装,可dump和load多次,仅支持python
f=shelve.open('shelve')#打开数据文件,不要后缀名
f.keys()
f.items()
f.get('name')#获取name对应的数据
f.get('info')
del f['name']#删除
f['name']='new name'#可直接修改
f.close()
4、xml,通过<>来标记数据
import xml.etree.ElementTree as ET
tree=ET.parse('xml')
root=tree.getroot()
#遍历xml
for child in root:
print(child.tag,child.attrib)
for i in child:
print(i.tag,i.text)
#只遍历year节点
for node in root.iter('year'):
print(node.tag,node.text)
#修改
for node in root.iter('year'):
new_year=int(node.text)+1
node.text=str(new_year)
node.set('updated','yes')#添加一个属性
tree.write('new_xml')
#删除
for country in root.findall('country'):
rank=int(country.find('rank').text)
if rank > 50:
root.remove(country)
tree.write('new_xml')
(八)、configparser模块
import configparser
config=configparser.ConfigParser()
config.read('conf.ini')
print(config.sections())
print(config.default_section)
# #'clear', 'get', 'getboolean', 'getfloat', 'getint', 'items', 'keys', 'name', 'parser', 'pop', 'popitem', 'setdefault', 'update', 'values'
# print(config['CLIENT'].keys())
# print(config['CLIENT']['port'])
#每个节点都会出现DEFAULT的内容
for k in config['CLIENT']:
print(k)
for k,v in config['CLIENT'].items():
print(k,v)
#判断是否有某参数
if 'server' in config['CLIENT']:print('in')
#获取某节点的所有key
print(config.options('group1'))
#增加
config.add_section('group3')
config['group3']['name']='test'
config['group3']['age']='18'
config.write(open('t.ini','w'))
#删除某一节点值
config.remove_option('group1','k2')
config.write(open('conf.ini','w'))
#删除某一节点
config.remove_section('group1')
config.write(open('conf.ini','w'))
(八)、加密模块