一.json模块

  作用:

  用于【字符串】和 【python基本数据类型】 间进行转换

  Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding

  encoding 把一个Python对象编码转换成Json字符串;decoding 把Json格式字符串解码转换成Python对象。 

与pickle区别:

json是可以在不同语言之间交换数据的,而pickle只在python之间使用

json只能序列化最基本的数据类型,而pickle可以序列化所有的数据类型,包括类,函数都可以序列化

  函数:

  dump  --序列化python数据类型对象为JOSN格式的类文件对象,dump    列表-》字符串 -》 类文件对象

  load    --从josn类文件对象中反序列为PYTHON数据类型对象, 打开文件=》读取内容=》python数据类型如(列表、字典)

    dumps  --序列化python数据类型对象为字符串格式的josn对象,python数据类型如(列表、字典)-》JOSN字符串

    loads  --将josn字符串反序列化为PYTHON数据类型,josn字符-》python数据类型如(列表、字典)

  举例:

import josn
#序列化PYTHON数据类型为JSON格式的类文件并写入
dic = {'k1':1,'k2':2}
json.dump(dic,open('db','w'))
#从类文件中反序列化为python数据对象
r = json.load(open('db','r'))
print(r)
import json

#将PYTHON对象序列化为字符串格式的JOSN对象
li = ["a","b","c"]
result = json.dumps(li)
print(result,type(result)) #运行结果
["a", "b", "c"] <class 'str'>
import json

li = '[1,2,3,4]'
#将字符串反序列化为python数据对象
result = json.loads(li)
print(result,type(result)) #运行结果
[1, 2, 3, 4] <class 'list'>

注:反序列化时注意字典内部要使用双引号 ("")

2. 正常显示json内容

JSON是一个很棒的序列格式,如今广泛应用在API和web服务中,但是很难用裸眼来看大数据量的JSON,它们很长,还在一行里。

可以用参数 indent 来更好地打印JSON数据,这在跟 REPL或是日志打交道的时候很有用:

>>> import json
>>> print(json.dumps(data)) # No indention
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}
>>> print(json.dumps(data, indent=2)) # With indention
{
"status": "OK",
"count": 2,
"results": [
{
"age": 27,
"name": "Oz",
"lactose_intolerant": true
},
{
"age": 29,
"name": "Joe",
"lactose_intolerant": false
}
]
}

二.configparser

  作用:

  configparser用于处理特定格式的文件,其本质上是利用open来操作文件

指定格式:

# 注释1
; 注释2 [section1] # 节点
k1 = v1 # 值
k2:v2 # 值 [section2] # 节点
k1 = v1 # 值 指定格式

函数:

sections()  --返回所有配置节点的名字

has_section(section)  --返回给定节点是否存在

has_option(section, option)  --返回指定选项是否在指定的节点中

options(section)    --返回指定节点的选项列表

read(filenames, encoding=None)  --读取解析配置文件

get(section, option, raw=False, vars=None, fallback=_UNSET)  --以字符串格式返回指定节点选项的值

getint(section, options, raw=False, vars=None, fallback=_UNSET) --将返回指定节点选项的值转化为int类型

items(section=_UNSET, raw=False, vars=None)  --以元组格式返回指定节点的所有键值对

remove_section(section)    --移除指定节点包括其下选项

remove_option(section, option) --移除指定节点下的键值

set(section, option, value)   --设置指定节点下的选项,需写入文件方可生效

write(fp, space_around_delimiters=True)  --写入配置文件

举例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import configparser conf = configparser.ConfigParser()
conf.read('config.txt')
result = conf.sections()
print(result) sub_res = conf.options('test')
print(sub_res) #获取节点下的内容
conf = configparser.ConfigParser()
conf.read('config.txt')
result = conf.get('test','name')
print(result) #检查节点
conf = configparser.ConfigParser()
conf.read('config.txt')
file_check = conf.has_section('test')
print(file_check)
#添加节点
conf.add_section('test3')
conf.write(open('config.txt','w'))
#删除节点
conf.remove_section('test2')
conf.write(open('config.txt','w')) #以字符串格式返回指定节点选项的值
conf = configparser.ConfigParser()
conf.read('config.txt')
result = conf.get('test','name')
print(result,type(result)) #将返回指定节点选项的值转化为int类型
conf = configparser.ConfigParser()
conf.read('config.txt')
result = conf.getint('test','age')
print(result,type(result)) #以元组格式返回指定节点的所有键值对
conf = configparser.ConfigParser()
conf.read("config.txt")
result = conf.items("test")
print(result) 

三.XML

功能:

XML是实现不同语言或程序之间进行数据交换的协议

格式:

<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2023</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2026</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2026</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>

XML模块支持两个类;

    1. ElementTree代指整个xml文档树
    2. Element 指一个树节点

       每个Elenment都有相关联的属性:

'tag' - 标签,节点名称.
'attributes' - 节点属性.
'text' - 节点的文本内容.
'tail' - 节点结束标记.

class Element()

 函数:

  makeelement(self, tag, attrib)  --创建新的节点

  append(self, subelement)    --向节点中追加内容

  insert(self, index, subelement)  --在子节点下插入节点

  remove(self, subelement)    --删除匹配的子节点

  getchildren(self)        --获得所有子节点

  find(self, path, namespaces=None)  --找到第一个匹配名字或者路径的节点

  findtext(self, path, default=None, namespaces=None)  --找到第一个匹配指定tag或path的文本

  findall(self, path, namespaces=None)  --找到所有匹配tag 或path的节点

  get(self, key, default=None)      --获得所有节点的属性

  set(self, key, value)     --设置节点属性

  keys(self)  --获得节点键值

  SubElement(parent, tag, attrib={}, **extra)   --创建子节点并添加到父节点中

举例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from xml.etree import ElementTree as ET #创建子节点
node = ET.parse('test.xml')
root = node.getroot()
son = root.makeelement("t1", {'t1': 'v1'})
val = son.makeelement("t2", {'t2': 'v2'})
root.append(son)
son.append(val)
node.write('test.xml') #设置指定标签属性
valu = ET.parse('xmltest.xml')
root = valu.getroot()
for i in root.iter('year'):
new_year = int(i.text) + 1
i.text = str(new_year)
i.set('time','time')
del i.attrib['time'] valu.write('xmltest.xml') #返回包含所有元素属性键的列表
info = ET.parse('insert.xml')
root = info.getroot()
for i in root.iter('country'):
rank = i.find('rank')
key = rank.keys()
print(key) #返回指定节点属性
info = ET.parse('insert.xml')
root = info.getroot()
for i in root.iter('country'):
allarr = i.get('name')
print(allarr) #查找匹配tag的文本内容
#车次发车时间表
res =requests.get("http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=K234&UserID=")
result = res.text from xml.etree import ElementTree as ET
init = ET.XML(result)
for i in init.iter("TrainDetailInfo"):
print(i.find("TrainStation").text,i.find("ArriveTime").text,i.find("StartTime").text,i.find("KM").text) #在节点下插入子节点
rtree = ET.parse('test.xml')
root=rtree.getroot()
tree = ET.SubElement(root,'book')
son = ET.Element('name')
son.text = 'insert,test'
tree.insert(2,son)
rtree.write('insert.xml')

 删除节点 

from xml.etree import ElementTree as ET

############ 解析文件方式 ############

# 直接解析xml文件
tree = ET.parse("xo.xml") # 获取xml文件的根节点
root = tree.getroot() ############ 操作 ############ # 顶层标签
print(root.tag) # 遍历data下的所有country节点
for country in root.findall('country'):
# 获取每一个country节点下rank节点的内容
rank = int(country.find('rank').text) if rank > 50:
# 删除指定country节点
root.remove(country) ############ 保存文件 ############
tree.write("newnew.xml", encoding='utf-8') 解析文件方式打开,删除,保存

  class ElementTree()

  函数 :

    getroot()  --获取所有节点内容

    parse(self, source, parser=None)  -- 加载XML文件到elementtree中

    

from xml.etree import ElementTree as ET

# 直接解析xml文件
tree = ET.parse("xo.xml") # 获取xml文件的根节点
root = tree.getroot()

  创建XML文件 

from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("famliy") # 创建节点大儿子
son1 = ET.Element('son', {'name': '儿1'})
# 创建小儿子
son2 = ET.Element('son', {"name": '儿2'}) # 在大儿子中创建两个孙子
grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson2 = ET.Element('grandson', {'name': '儿12'})
son1.append(grandson1)
son1.append(grandson2) # 把儿子添加到根节点中
root.append(son1)
root.append(son1) tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False) 创建方式(一)

方法一

from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("famliy") # 创建大儿子
# son1 = ET.Element('son', {'name': '儿1'})
son1 = root.makeelement('son', {'name': '儿1'})
# 创建小儿子
# son2 = ET.Element('son', {"name": '儿2'})
son2 = root.makeelement('son', {"name": '儿2'}) # 在大儿子中创建两个孙子
# grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson1 = son1.makeelement('grandson', {'name': '儿11'})
# grandson2 = ET.Element('grandson', {'name': '儿12'})
grandson2 = son1.makeelement('grandson', {'name': '儿12'}) son1.append(grandson1)
son1.append(grandson2) # 把儿子添加到根节点中
root.append(son1)
root.append(son1) tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

方法二

from xml.etree import ElementTree as ET
# 创建根节点
root = ET.Element("famliy") # 创建节点大儿子
son1 = ET.SubElement(root, "son", attrib={'name': '儿1'})
# 创建小儿子
son2 = ET.SubElement(root, "son", attrib={"name": "儿2"}) # 在大儿子中创建一个孙子
grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})
grandson1.text = '孙子' et = ET.ElementTree(root) #生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True, short_empty_elements=False)

方法三

四.requests

  简介:

  Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,

  变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作

  • 安装模块

    pip install requests

  • 用法
usage:无参数 

   >>> import requests
>>> r = requests.get('https://www.python.org')
>>> r.status_code
200
>>> 'Python is a programming language' in r.content
True ... or POST: >>> payload = dict(key1='value1', key2='value2')
>>> r = requests.post('http://httpbin.org/post', data=payload)
>>> print(r.text)
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
import requests
#有参数实例
payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.get("http://httpbin.org/get", params=payload) print(ret.url)
print(ret.text)

  HTTP请求和XML实例

import requests
from xml.etree import ElementTree as ET
r = requests.get('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
result = r.text # 解析XML格式内容
node = ET.XML(result) # 获取内容
if node.text == "Y":
print("在线")
else:
print("离线")
import requests
#车次发车时间表
res = requests.get("http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=K234&UserID=")
result = res.text from xml.etree import ElementTree as ET
init = ET.XML(result)
for i in init.iter("TrainDetailInfo"):
print(i.find("TrainStation").text,i.find("ArriveTime").text,i.find("StartTime").text,i.find("KM").text)

五.shutil

功能:

高级的 文件、文件夹、压缩包 处理模块

函数 :

  copyfile(src, dst, *, follow_symlinks=True)  --从源拷贝到目的文件

  copymode(src, dst, *, follow_symlinks=True)  --将权限位从src复制到dst

  copyfileobj(fsrc, fdst, length=16*1024)  --将文件内容拷贝到另一个文件中

  copystat(src, dst, *, follow_symlinks=True)   --将权限位、 最后存取时间、 最后修改时间和标志从src复制到dst

  copy(src, dst, *, follow_symlinks=True)  --将src文件复制到文件或dst目录

  copy2(src, dst, *, follow_symlinks=True)  --将文件的所有属性拷贝到dst

  ignore_patterns(*patterns)    --此工厂函数创建一个函数,它可以作为可调用用于copytree()的ignore参数,忽略匹配glob风格的模式的文件和目录

  copytree(src, dst, symlinks=False, ignore=None,

       copy_function=copy2,ignore_dangling_symlinks=False)  --以递归方式复制以src为根的整个目录树

    rmtree(path, ignore_errors=False, onerror=None)  --删除整个目录树

    move(src, dst, copy_function=copy2)  --以递归方式移动文件或目录(src)到另一个位置(dst)

    make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,

      dry_run=0, owner=None, group=None, logger=None)    --创建压缩包并返回文件路径

  举例: 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import shutil
#拷贝文件内容到dst文件
shutil.copyfileobj(open('config.txt','r'),open('copyfile.txt','w'))
#从源拷贝到目的文件
shutil.copyfile('config.txt','config2.txt')
#将权限位从src复制到dst
shutil.copymode('config.txt','config2.txt')
#将权限位、 最后存取时间、 最后修改时间和标志从src复制到dst
shutil.copystat('config.txt','config2.txt')
#将src文件复制到文件或dst目录
shutil.copy('config.txt','config2.txt')
#递归的去拷贝文件夹,忽略匹配的文件和目录
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
#递归的去删除文件
shutil.rmtree('test')
#以递归方式移动文件或目录(src)到另一个位置(dst)
shutil.move('test','dsttest')
#创建压缩包并返回文件路径
ret = shutil.make_archive("filename", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

六.subprocess

   功能:

    用于执行复杂的系统命令

   函数:

    call(*popenargs, **kwargs)  --执行命令并返回结果

    check_call    --执行命令如果返回0则返回执行结果

    subprocess.Popen(...)  --用于执行复杂的系统命令

   参数:

    • args:shell命令,可以是字符串或者序列类型(如:list,元组)
    • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
      所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    • shell:同上
    • cwd:用于设置子进程的当前目录
    • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    • universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
    • startupinfo与createionflags只在windows下有效
      将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

  举例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import subprocess
#--执行命令并返回结果
subprocess.call('ipconfig')
#--执行命令如果返回0则返回执行结果
subprocess.check_call('nslookup www.baidu.com')
#创建目录
obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")
obj.stdin.close()
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)") out_error_list = obj.communicate()
print(out_error_list)
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)") out_error_list = obj.communicate()
print(out_error_list)
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
out_error_list = obj.communicate('print("hello")')
print(out_error_list)

python模块(二)的更多相关文章

  1. Python - 模块(二)

    目录 Python - 模块(二) re re下面的方法 logging os Python - 模块(二) re re模块提供了正则表达式的相关操作 主要字符介绍: . 通配符,除了换行符之外的任意 ...

  2. python 模块二(os,json,pickle)

    #################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...

  3. 万恶之源 - Python模块二

    shelve 我们之前学了json和pickle模块 这些都是序列化的模块,咱们进行在讲一个序列化的东西 叫做shelve 你们肯定有个疑问,这个东西和那个类似为什么要讲.是因为这个模块比较简单的,并 ...

  4. Python模块二

    os模块是与操作系统交互的一个接口​ <em>#和文件夹相关 os.makedirs('dirname1/dirname2')    可生成多层递归目录 os.removedirs('di ...

  5. Python模块(二)(序列化)

    1. namedtuple 命名元组->类似创建了一个类 from collections import namedtuple p = namedtuple("Point", ...

  6. 【转】python模块分析之hashlib加密(二)

    [转]python模块分析之hashlib加密(二) hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用.一.函数分析:1. ...

  7. python的logging日志模块(二)

    晚上比较懒,直接搬砖了. 1.简单的将日志打印到屏幕   import logging logging.debug('This is debug message') logging.info('Thi ...

  8. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  9. Python模块之configpraser

    Python模块之configpraser   一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...

  10. python 学习第五天,python模块

    一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...

随机推荐

  1. C++类构造函数、析构函数运行机理

    http://blog.sina.com.cn/s/blog_6fd68d5f0100n60h.html 前言--构造函数.析构函数的简单理解:1)构造函数---对象被创建时候调用的函数:2)析构函数 ...

  2. readystatechange

    // alternative to DOMContentLoaded document.onreadystatechange = function () { if (document.readySta ...

  3. 用Python写一个小爬虫吧!

    学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习. 我在此之前接触过Python,也写过一些小脚 ...

  4. MySQL开启日志跟踪

    在开发过程中有时候会遇到sql相关的问题,但是有时候代码中不会直接看到真实的sql,想要看到mysql中实际执行的是什么sql,可以通过开启日志跟踪方式查看. 1 开启日志跟踪 SET GLOBAL ...

  5. grub加密。

    一.介绍 安全无小事  linux系统的安全分为很多方面,什么端口啊,什么网络啊,听着都特么烦,今天谈谈最简单明显的密码安全. 二.单用户模式 单用户模式个人觉得相当有用,可以用来修复系统,修改密码… ...

  6. Linux三剑客之sed详解(1)

    sed (stream editor 流编辑器简写 ) ,用于过滤和转换文本 synopsis sed [option] ... {script-only-if-no-other-script} [i ...

  7. 我的Python分析成长之路8

    Numpy数值计算基础 Numpy:是Numerical Python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用 ...

  8. (原)iOS 用recursiveDescription打印View

    今天要做一个搜索功能,用到UISearchBar 无奈背景太丑,就自定义了一个,首先用View私有方法打印一下searchBar的层次, 具体修改代码如下 for (UIView *view in _ ...

  9. apr的使用

    APR(Apache Portable Runtime),即Apache可移植运行库,正如官网所言,APR的使命是创建和维护一套软件库,以便在不同操作系统(Windows.Linux等)底层实现的基础 ...

  10. Selenium WebDriver高级用法

    Selenium GitHub地址 选择合适的WebDrvier WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier.FirefoxDriver.InternetExplo ...