Python之路【第5天】
来源:互联网 发布:c语言是开源的吗 编辑:程序博客网 时间:2024/06/02 16:16
模块
目录
- 模块
- os模块
- sys模块
- shutil模块
- shelve 模块
- xml处理模块
- ConfigParser模块
- hashlib模块
- logging模块
- 浅谈面向对象
模块,用代码实现了某个功能的代码集合。
如:os 是系统相关的模块;file是文件操作相关的模块
模块分为三种:
自定义模块
内置模块
开源模块
import sys
import os
导入一个py文件,解释器解释该py文件
导入一个包,解释器解释该包下的 init.py 文件
os模块
用于提供系统级别的操作
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录os.curdir 返回当前目录: ('.')os.pardir 获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2') 可生成多层递归目录os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname') 生成单级目录;os.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 输出用于分割文件路径的字符串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不存在,返回Falseos.path.isabs(path) 如果path是绝对路径,返回Trueos.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回Falseos.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
sys模块
用于提供对解释器相关的操作
sys.argv 命令行参数List,第一个元素是程序本身路径sys.exit(n) 退出程序,正常退出时exit(0)sys.version 获取Python解释程序的版本信息sys.maxint 最大的Int值sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
shutil模块
高级的 文件、文件夹、压缩包 处理模块
- shutil.copyfileobj(fsrc,fdst,length) #将文件的内容拷贝到另一个文件中,可以是部分内容
- shutil.copyfile(src,dst) #拷贝文件
- shutil.copymode(src,dst) #仅拷贝权限。
- shutil.copystat(src,dst) #拷贝文件和权限
- shutil.copytree(src,dst,symlinks=False,ignore=None) #递归拷贝文件
- shutil.rmtree(path) #递归取删除文件
- shutil.move(src,dst) #递归取移动文件
- shutil.make_archive(base_name,format,…)
base_name: 压缩包的文件名,也可以是压缩包的路径。
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
import shutilret = shutil.make_archive("aa", 'gztar', root_dir='/test')
shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import shelved=shelve.open("shelve_test")class Test(object): #创建一个类 def __init__(self,n): #为该类赋一个变量 self.n=nt=Test(123)t2=Test(456)name=["aa","bb","cc"]d["test"]=name #持久化列表d["t1"]=t #持久化类d["t2"]=t2a=shelve.open("shelve_test")b1=a.get("t1")print("t1的内容:",b1.n)b2=a.get("t2")print("t2的内容:",b2.n)print("test的内容:",a.get("test"))#结果为:t1的内容: 123t2的内容: 456test的内容: ['aa', 'bb', 'cc']
xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单
至今很多传统公司如金融行业的很多系统的接口还主要是xml
生成一个xml文件,文件名为 test.xml
import xml.etree.ElementTree as ETnew_xml=ET.Element("data")name=ET.SubElement(new_xml,"stu",attrib={"name":"aa"})age=ET.SubElement(name,"age",attrib={"updated":"no"})sex=ET.SubElement(name,"sex")age.text="18"sex.text="F"name=ET.SubElement(new_xml,"stu",attrib={"name":"bb"})age=ET.SubElement(name,"age",attrib={"updated":"no"})sex=ET.SubElement(name,"sex")age.text="20"sex.text="M"et=ET.ElementTree(new_xml)et.write("new_text.xml",encoding="utf-8",xml_declaration=True)ET.dump(new_xml)#结果为:<?xml version='1.0' encoding='utf-8'?><data> <stu name="aa"> <age updated="no">18</age> <sex>F</sex> </stu> <stu name="bb"> <age updated="no">20</age> <sex>M</sex> </stu></data>
对test.xml 进行 查看,修改,删除操作
#导入模块import xml.etree.ElementTree as ETtree=ET.parse("test.xml")root=tree.getroot()print(root.tag) #打印根节点#遍历xml文档for child in root: #打印子节点及其属性 print(child.tag,child.attrib) for i in child: print("----",i.tag,i.text) #打印子节点的值#修改年龄+1for node in root.iter("age"): #遍历子节点的age值 new_age=int(node.text)+1 #将年龄加油 node.text=str(new_age) node.set("updated","yes") #将更新设置为yestree.write("xmltest.xml") #执行写操作print("更新成功")#删除nodefor stu in root.findall("stu"): #遍历子节点的所有值 age=int(stu.find("age").text) #将年龄找出来 if age>20: root.remove(stu) #如果年龄大于20则删除该节点tree.write("xmltest.xml") #执行写操作print("删除成功")#结果为:datastu {'name': 'aa'}---- age 18---- sex Fstu {'name': 'bb'}---- age 20---- sex M更新成功删除成功----------其中xmltest.xml内容为------------<data> <stu name="aa"> <age updated="yes">19</age> <sex>F</sex> </stu></data>
ConfigParser模块
用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。
import configparserconfig = configparser.ConfigParser()config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9'}with open('example.ini', 'w') as configfile: config.write(configfile)
hashlib模块
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib #导入哈希模块m=hashlib.md5() #初始化m.update(b"hello")m.update(b"It is me")print("Md5二进制:",m.digest())print("Md5十六进制:",m.hexdigest())#结果为:Md5二进制: b'\xb4\x81\rB\xb8\x9fm\xad\xc0\xc34\xd2Ln\xff\xe9'Md5十六进制: b4810d42b89f6dadc0c334d24c6effe9
散列消息鉴别码,简称HMAC
是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。
#散列消息鉴别码HMACimport hmaca=hmac.new(b"secret_key") #可以是任何字符a.update(b"hello")print("HMAC加密:",a.hexdigest())#结果为:HMAC加密: e177047f432a59e00fe369ec40587175
logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用。
import logginglogging.basicConfig(filename="example.log",level=logging.INFO)logging.debug("this message should go to log file")logging.info("so do this")logging.warning("and this ,too")
其中level=loggin.INFO意思是,把纪录级别设置为INFO,也就是说只有是INFO或比INFO级别更高才会被纪录到文件里,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。
日志格式加上时间
import logginglogging.basicConfig(format="%(asctime)s %(message)s",datefmt="%Y-%m-%d %H:%M:%S %p")logging.warning("danger!!!")#结果为:2017-12-11 21:08:29 PM danger!!!
如果想同时把log打印在屏幕和文件日志里
import logging #导入日志模块logger=logging.getLogger("TEST_LOG") #日志名称logger.setLevel(logging.DEBUG) #设置全局日志级别ch=logging.StreamHandler() #调用显示处理函数ch.setLevel(logging.DEBUG)fh=logging.FileHandler("access.log") #调用文件处理函数fh.setLevel(logging.WARNING)#设置日志输出的格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')ch.setFormatter(formatter) #格式化显示格式fh.setFormatter(formatter) #格式化写入文件的格式logger.addHandler(ch) #添加到处理器logger.addHandler(fh) #添加到处理器logger.debug("debug message") #信息设置logger.info("info message")logger.warning("warning message")logger.error("error message")logger.critical("critical message")#结果为:2017-12-11 21:26:38,788 - TEST_LOG - DEBUG - debug message2017-12-11 21:26:38,788 - TEST_LOG - INFO - info message2017-12-11 21:26:38,789 - TEST_LOG - WARNING - warning message2017-12-11 21:26:38,790 - TEST_LOG - ERROR - error message2017-12-11 21:26:38,790 - TEST_LOG - CRITICAL - critical message
浅谈面向对象
面向对象 OOP
基本原则:
1,不写重复代码
2,需要经常变更
一个函数无法处理复杂的对象情况,所有需要引入类
以下以 cs为例 创建一个类
class Role(object): #创建一个类 member=0 #统计战场人数 def __init__(self,name,role,weapon): #定义对象的属性 self.name=name #将参数值赋给对象属性 self.role=role self.weapon=weapon def add(self): #对象加入战场函数 Role.member+=1 print("%s 加入战场,战场一共[%s]人"%(self.name,self.member)) def shot(self): #对象射击动作 print("%s 正在射击"%self.name) def buy_weapon(self,weapon): #对象购买武器 print("%s is buging [%s]"%(self.name,weapon)) self.weapon=weapon #更新武器class ET (Role): #创建一个外星人军团 def __init__(self,name,role,weapon,kinds): #继承了Role的特征, 但是他有变形能力 super(ET,self).__init__(name,role,weapon) self.kinds=kinds #将变量赋给该对象的属性 def kind(self): print("%s 开始变身。。。"%self.name)r1=Role("aa","police","AK-47")t1=Role("bb","terrorist","B11")t2=Role("cc","terrorist","B12")e1=ET("外星人","ET","GG46","变形")r1.add()t1.add()t1.buy_weapon("AK-47")print("bb的新武器:",t1.weapon)t2.add()t2.shot()e1.add()e1.kind()#结果为:aa 加入战场,战场一共[1]人bb 加入战场,战场一共[2]人bb is buging [AK-47]bb的新武器: AK-47cc 加入战场,战场一共[3]人cc 正在射击外星人 加入战场,战场一共[4]人外星人 开始变身。。。
- Python之路【第5天】
- Python之路【第1天】
- Python之路【第2天】
- Python之路【第3天】
- Python之路【第4天】
- Python之路【第6天】
- Python学习之路-第一天
- python之路-------第4章、介绍python对象类型
- Python之路【第一篇】:Python简介和入门
- Python 第一天之问题
- 坚持#第229天~零基础自学云计算基础语言应用之python第5节
- Python 第一天之Python环境配置
- python第4天:基本类型之序列
- python之路-------第3章、如何运行程序,热身
- Python学习---第5天---装饰器
- python 第2天
- python 第3天
- python第n天
- java线程池(2)-线程池添加任务的过程(原理)
- return、return true和return false
- CentOS7 安装 zabbix-agentd
- CocosCreator 怎么添加JSB绑定的C++类到场景中
- Lisp运行程序
- Python之路【第5天】
- 根据给定的一系列整数关键字和素数p,用除留余数法定义hash函数H(Key)=Key%p,将关键字映射到长度为p的哈希表中,用线性探测法解决冲突。重复关键字放在hash表中的同一位置。
- java.sql.SQLException: Value '0000-00-00 ' can not be represented as java.sql.Timest
- nginx负载均衡和反向代理
- 机房之下机窗体
- spring定时任务.线程池,自定义多线程配置
- 获取img标签中的src内容
- mysql主从复制和mycat读写分离
- 习近平:实施国家大数据战略,加快建设数字中国(万字长文解读)