一.序列化
Python中用于序列化的两个模块
json 用于【字符串】和 【python基本数据类型】 间进行转换
pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
Json.loads()用于将字典,列表形式的字符串转换成相应的字典,列表
Json.dump()将基本数据类型,列表,字典,转换成字符串
pickle模块提供了四个功能:dumps、dump、loads、load
二.安装第三方模块
第1种安装方法:
安装软件管理工具pip3 (python3中自带了pip3)
将pip3添加到环境变量
pip3 install 被安装的东西
第2种安装方法:
下载代码,安装
三.requests模块
Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
发送get请求
发送携带请求头的get请求
注:更多见Python官方文档:https://docs.python.org/3.5/library/urllib.request.html#module-urllib.request
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
1、安装模块
1
pip3 install requests
2、使用模块
get请求
post请求
其它请求
更多requests模块相关的文档见:http://cn.python-requests.org/zh_CN/latest/
四.XML模块
XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下:
2
2023
141100
5
2026
59900
69
2026
13600
1、解析XML
利用ElementTree.XML将字符串解析成xml对象
利用ElementTree.parse将文件直接解析成xml对象
2、操作XML
XML格式类型是节点嵌套节点,对于每一个节点均有以下功能,以便对当前节点进行操作:
节点功能一览表
由于 每个节点 都具有以上的方法,并且在上一步骤中解析时均得到了root(xml文件的根节点),so 可以利用以上方法进行操作xml文件。
a. 遍历XML文档的所有内容
from xml.etree import ElementTree as ET
############ 解析方式一 ############
"""# 打开文件,读取XML内容
str_xml = open('xo.xml', 'r').read()
# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)"""
############ 解析方式二 ############
#直接解析xml文件
tree = ET.parse("xo.xml")
#获取xml文件的根节点
root = tree.getroot()
### 操作
#顶层标签
print(root.tag)
#遍历XML文档的第二层
for child in root:
#第二层节点的标签名称和标签属性
print(child.tag, child.attrib)
#遍历XML文档的第三层
for i in child:
#第二层节点的标签名称和内容
print(i.tag,i.text)
b、遍历XML中指定的节点
from xml.etree import ElementTree as ET
############ 解析方式一 ############
"""# 打开文件,读取XML内容
str_xml = open('xo.xml', 'r').read()
# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(str_xml)"""
############ 解析方式二 ############
#直接解析xml文件
tree = ET.parse("xo.xml")
#获取xml文件的根节点
root = tree.getroot()
### 操作
#顶层标签
print(root.tag)
#遍历XML中所有的year节点
for node in root.iter('year'):
#节点的标签名称和内容
print(node.tag, node.text)
c、修改节点内容
由于修改的节点时,均是在内存中进行,其不会影响文件中的内容。所以,如果想要修改,则需要重新将内存中的内容写到文件。
解析字符串方式,修改,保存
解析文件方式,修改,保存
d、删除节点
解析字符串方式打开,删除,保存
解析文件方式打开,删除,保存
3、创建XML文档
创建方式一
创建方式二
创建方式三
由于原生保存的XML时默认无缩进,如果想要设置缩进的话, 需要修改保存方式:
View Code
五.configparser模块
configparser用于处理特定格式的文件,其本质上是利用open来操作文件。
指定格式
1、获取所有节点
1
2
3
4
5
6
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret= config.sections()
print(ret)
2、获取指定节点下所有的键值对
1
2
3
4
5
6
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret= config.items('section1')
print(ret)
3、获取指定节点下所有的建
1
2
3
4
5
6
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
ret= config.options('section1')
print(ret)
4、获取指定节点下指定key的值
1
2
3
4
5
6
7
8
9
10
11
12
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
v= config.get('section1','k1')
# v = config.getint('section1', 'k1')
# v = config.getfloat('section1', 'k1')
# v = config.getboolean('section1', 'k1')
print(v)
5、检查、删除、添加节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
# 检查
has_sec= config.has_section('section1')
print(has_sec)
# 添加节点
config.add_section("SEC_1")
config.write(open('xxxooo','w'))
# 删除节点
config.remove_section("SEC_1")
config.write(open('xxxooo','w'))
6、检查、删除、设置指定组内的键值对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import configparser
config= configparser.ConfigParser()
config.read('xxxooo', encoding='utf-8')
# 检查
has_opt= config.has_option('section1','k1')
print(has_opt)
# 删除
config.remove_option('section1','k1')
config.write(open('xxxooo','w'))
# 设置
config.set('section1','k10',"123")
config.w
六.shutil模块
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
1
2
3
import shutil
shutil.copyfileobj(open('old.xml','r'),open('new.xml','w'))
shutil.copyfile(src, dst)
拷贝文件
1
shutil.copyfile('f1.log','f2.log')
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
1
shutil.copymode('f1.log','f2.log')
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
1
shutil.copystat('f1.log','f2.log')
shutil.copy(src, dst)
拷贝文件和权限
1
2
3
import shutil
shutil.copy('f1.log','f2.log')
shutil.copy2(src, dst)
拷贝文件和状态信息
1
2
3
import shutil
shutil.copy2('f1.log','f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
1
2
3
import shutil
shutil.copytree('folder1','folder2', ignore=shutil.ignore_patterns('*.pyc','tmp*'))
import shutil
shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
1
2
3
import shutil
shutil.rmtree('folder1')
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
1
2
3
import shutil
shutil.move('folder1','folder3')
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
1
2
3
4
5
6
7
8
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
import shutil
ret= shutil.make_archive("wwwwwwwwww",'gztar', root_dir='/Users/wupeiqi/Downloads/test')
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
import shutil
ret= shutil.make_archive("/Users/wupeiqi/wwwwwwwwww",'gztar', root_dir='/Users/wupeiqi/Downloads/test')
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
zipfile解压缩
tarfile解压缩
七.logging模块
用于便捷记录日志且线程安全的模块
1、单文件日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging
logging.basicConfig(filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(10,'log')
日志等级:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
注:只有【当前写等级】大于【日志等级】时,日志文件才被记录。
日志记录格式:
2、多文件日志
对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。
日志(一)
日志(二)
如上述创建的两个日志对象
当使用【logger1】写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中
当使用【logger2】写日志时,会将相应的内容写入 l2_1.log 文件中