今日内容:

1.hash模块
2.xml模块
3.configparser模块
4.sheve 模块
5.shutil模块

知识点一:hash
什么是hash:
 hash是一种算法,该算法接受传入的的内容,经过运算得到一串hash如果把hash算法比喻一座工厂
 那传给hash算法的内容就是原材料,生产的hash值就是生产出的产品
 
为何用hash算法:
 hash值产品有三大特性:
 1.只要传入的内容一样,得到的hash值必然是一样的
 2.只要我们使用的hash算法固定,无论传入的内容有多大得到的hash值得长度是固定的
 3.不可以用hash值逆推原来的内容
 基于1和2可以在下载文件时做文件一致性校验
 基于1和3可以对密码进行加密
 
 
# 例如:
import hashlib
password=input('密码:')
m=hashlib.md5('天王盖地虎'.encode('utf-8'))  #可以多一层复杂性加密
m.update(password.encode('utf-8'))
print(m.hexdigest())
'''
结果:
密码:123
41046ee2686f6c698c859a13b47cdb1f
'''

import hashlib
# 用法1:
#1.造工厂
m=hashlib.md5()     #m=hashlib.sha256() 可以是其他加密个是
#2.运送材料
m.update('你好啊'.encode('utf-8'))
#3.产出hash值
print(m.hexdigest())  #124756ef340daf80196b4124686d651c

#用法2:
m=hashlib.md5('你'.encode('utf-8')) #可以在造工厂的时候就添加材料
m.update('好啊'.encode('utf-8')) 
print(m.hexdigest())  #124756ef340daf80196b4124686d651c   hash结果:和上面一样,因为传入的材料是一样的

知识点二:xml
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,
但json使用起来更简单
xml的格式如下,就是通过<>节点来区别数据结构的:

xml模块:
 1.标签名  root.tag
 2.便签属性 root.attrib
 3.标签文本 root.text

以xml.xml文件为例:
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

可以对xml文件进行一下操作:
import xml.etree.ElementTree as ET

tree=ET.parse('xml.xml')        #parse单词:从语法上分析 理解
root = tree.getroot()

#对任何标签都有三个特征:便签名、标签属性、标签的文本内容
print(root.tag)    #data
print(root.attrib)  #标签属性 {}
print(root.text)  #标签文本  空

print(list(root.iter('year')))
print(root.iter('year'))

for year in root.iter('year'):
    print(year.tag)
    print(year.attrib)
    print(year.text)
    print('========================')

# 在root的子节点找,只找一个
print(root.find('country').attrib)     #{'name': 'Liechtenstein'}
print(root.findall('country'))     #[<Element 'country' at 0x055F5CC0>,.. 列表格式
# 在root的子节点找,找所有
# 列表推导式,找出所有二级country本身的属性
print([country.attrib for country in root.findall('country')])
for country in root.findall('country'):
   print(country.attrib)
# 结果:
'''
{'name': 'Liechtenstein'}
{'name': 'Singapore'}
{'name': 'Panama'}
'''

# 1.查
# 遍历整个文档
for country in root:
    # print('========>国家%s'%country.attrib)
    for item in country:
        print(item.tag)                                             #year    #rank
        print(item.attrib)      #<year>2008</year>属性标签为空:{}  #{}      #{'updated': 'yes'}
        print(item.text)   #<year>2008</year>文本标签为2008         #2018    #2

# 2.改
for year in root.iter('year'):
    print(year.tag)  #year year year
    year.attrib={'update':'yes'}
    year.text=str(int(year.text)+1)

tree.write('xml.xml')

# 3.增加
for country in root:
    rank=country.find('rank')
    if int(rank.text)>50:
        tag=ET.Element('egon')        #element单词意思:元素   是否意思为增加一个名为egon的标签???
        tag.attrib={'update':'yes'}
        tag.text='NB'
        country.append(tag)

tree.write('xml.xml')

# 4.删除
for country in root:
    tag=country.find('egon')
    # print(tag)             #前两个country下面没有egon,所有没提示 None
    if tag is not None:
        print('====>')
        country.remove(tag)
tree.write('xml.xml')

知识点三:configparser模块(解析配置文件)
主要所有三项:
 1.config.sections  查看标题
 2.config.options   查看指定标题下面所有key=value的key值
 3.config.get       查看指定标题下面key=value的value值
 4.config.items     查看取所有key、value的值以(key,value)格式显示

以文件config.ini格式为例:
[egon]
sex='female'
age=20
salary=31
is_auth=True

[alex]
sex='male'
age=20
salary=1
is_auth=True

可以进行一下操作:
import configparser
config=configparser.ConfigParser()
config.read('config.ini')

取标题
print(config.sections())   # ["'egon'", "'alex'"]

取文件标题下面下所有key=value的key
print(config.options('egon'))  #['sex', 'age', 'salary', 'is_auth']

取文件标题下面指定的key=value的value
print(config.get('egon','age'))  #20

取所有key=value的(key,value)格式
print(config.items('egon'))
[('sex', "'female'"), ('age', '20'), ('salary', '31'), ('is_auth', 'True')]

知识点四:sheve 模块(序列化和反序列化)
shelve更简单,也支持所有的的数据类型,但只能在python里面用
import shelve

f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
f['stu2_info']={'name':'gangdan','age':53}
1.存文件
f=shelve.open(r'shelve.txt')

2.取文件
print(f['stu1_info']['hobby'])
print(f['stu2_info']['name'])

3.改文件内容
注意点:
f['stu1_info']['age']=44444  这样看是赋值改动,但是实际没有改,因为没有写入的文件
print(f['stu1_info'])
要想写入,需要添加,writeback=True 将修改的文件写回后台文件
f=shelve.open(r'shelve.txt',writeback=True)
f['stu1_info']['age']=44444
print(f['stu1_info'])
'''
输出结果为:
{'name': 'egon', 'age': 44444, 'hobby': ['piao', 'smoking', 'drinking']}

知识点五:shutill模块
高级的 文件、文件夹、压缩包 处理模块
import shutil

拷贝文件
方式一:
with open('config.ini','r')as read_f,open('new.xml','w') as write_f:
    shutil.copyfileobj(read_f,write_f)

方式二:shutil.copyfile(src, dst)
源文件事先定义好,目标文件无需存在,
shutil.copyfile('new.xml', r'E:\f2.log') #拷贝到指定文件
shutil.copyfile('new.xml', 'f2.log')  #拷贝到当前文件夹

仅拷贝文件权限,内容、组、用户均不变  shutil.copymode(src, dst)
目标文件均不变,只是文件权限变动
shutil.copymode('new.xml', 'f2.log')

仅拷贝状态信息,包括:mode bits, atime, mtime, flags
shutil.copystat('new.xml', r'E:\f2.log')

拷贝文件和权限
import shutil
shutil.copy('f1.log', 'f2.log')

递归的去拷贝文件夹
import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,
# 注意对folder2目录父级目录要有可写权限,ignore的意思是排除

递归的取删除文件
import shutil
shutil.rmtree('folder1')

#递归的去移动文件夹 shutil.move(src, dst)
import shutil
shutil.move('folder1', 'folder3')

创建压缩包并返回文件路径
import shutil
'''
1.base_bak: 压缩后文件的名字,压缩包的文件名(也可以指定压缩好保存的具体文件目录)
    如 data_bak=>保存至当前路径
    如:/tmp/data_bak =>保存至/tmp/
2.gztar: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
3.root_dir: 被压缩文件的路径(默认当前目录)
4.owner: 用户,默认当前用户
5.group: 组,默认当前组
6.logger: 用于记录日志,通常是logging.Logger对象
'''
#res=shutil.make_archive('data_bak','gztar',root_dir=r'E:\PycharmProjects\untitled\day17\包练习')

#解压文件(解压上面刚刚压缩的文件)
import tarfile
t=tarfile.open(r'E:\PycharmProjects\untitled\day20\data_bak.tar.gz','r') #源文件路径
t.extractall(r'E:\PycharmProjects\untitled\day20\dir_tarfile') #解压后文件存放路径
t.close()

知识点六:面向对象

面向对象编程:
对象:特征与技能的集合体,上帝的思维方式

优点:
 可扩展性强
缺点:
 编程的复杂程度要高于面向过程

类;类是一系列具有相同特征、技能对象的集合体
强调:站的角度不同,总结出来的来是截然不同的

现实世界中:先有对象,后才有类
在程序中:必须先定义类,后调用类来产生对象

《类里面尽量用驼峰体》

面向对象初始模板:
class OldboyStudent:   #类的名称OldboyStudent
    school='Oldboy'    #特征(变量表示)

def learn(self):   #就是一个普通函数
        print('is learn skill')  #技能1(函数表示)

def choice(self):
        print('choose course')   #技能2(函数表示)

print(OldboyStudent)  #<class '__main__.OldboyStudent'>
print(OldboyStudent.__dict__)  #输出结果:如下
{'__module__': '__main__', 'school': 'Oldboy', 'learn':
<function OldboyStudent.learn at 0x05A9D810>, 'choice': <function OldboyStudent.choice at 0x05A9D7C8>,
'__dict__': <attribute '__dict__' of 'OldboyStudent' objects>, '__weakref__': <attribute '__weakref__' of
 'OldboyStudent' objects>, '__doc__': None}
Oldboy
print(OldboyStudent.__dict__['school'])   #'school'是以字符串传值得
print(OldboyStudent.school)
OldboyStudent.learn(123)  #OldboyStudent.learn('aaa')

注意理解:
OldboyStudent.learn(123) .后面跟的是类里面的属性,可以是变量名school和函数名learn

类的代码会在类定义阶段就立即执行,会产生一个类的名称空间
类的本身就是一个容器/名称空间,是用来存放名字的,这是类的用途之一

Python hash、xml、configparser、sheve、shutil模块讲解 以及 面向对象初识的更多相关文章

  1. Python中文件操作2——shutil模块

    1 文件操作 文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开.读取以及写入,这三种操作是对文件基本的使用.文件还有复制.删除.移动.改变文件的属主属组等操作.下面主要看os模块和shut ...

  2. python标准库介绍——16 shutil模块详解

    ``shutil`` 实用模块包含了一些用于复制文件和文件夹的函数. [Example 2-4 #eg-2-4] 中使用的 ``copy`` 函数使用和 Unix 下 ``cp`` 命令基本相同的方式 ...

  3. python笔记-7(shutil/json/pickle/shelve/xml/configparser/hashlib模块)

    一.shutil模块--高级的文件.文件夹.压缩包处理模块 1.通过句柄复制内容 shutil.copyfileobj(f1,f2)对文件的复制(通过句柄fdst/fsrc复制文件内容) 源码: Le ...

  4. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  5. Python自动化运维之10、模块之json、pickle、XML、PyYAML、configparser、shutil

    序列化 Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类 ...

  6. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  7. python模块(shelve,xml,configparser,hashlib,logging)

    1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...

  8. python ConfigParser、shutil、subprocess、ElementTree模块简解

    ConfigParser 模块 一.ConfigParser简介ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类 ...

  9. Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)

    本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ...

随机推荐

  1. Ubuntu获取root 权限,开机自动登入root

    新机器获取root权限,只需要给root 增加密码: sudo passwd root 修改开机自动登入: #sudo gedit /etc/lightdm/lightdm.conf 修改参数: au ...

  2. Java 文件操作-File

    1.File文件操作 java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录.File类只用于表示文件(目录)的信息(名称.大小等),不能对文件的 ...

  3. windows 密钥

    server 2016数据中心CB7KF-BWN84-R7R2Y-793K2-8XDDG

  4. MovieReview—Wile Hunter(荒野猎人)

     Faith is Power         Faith is power, this sentence is not wrong. Find your own beliefs, and strug ...

  5. UVALive 5031 Graph and Queries (Treap)

    删除边的操作不容易实现,那么就先离线然后逆序来做. 逆序就变成了合并,用并存集判断连通,用Treap树来维护一个连通分量里的名次. Treap = Tree + Heap.用一个随机的优先级来平衡搜索 ...

  6. UVA 1471 Defense Lines 防线 (LIS变形)

    给一个长度为n的序列,要求删除一个连续子序列,使剩下的序列有一个长度最大的连续递增子序列. 最简单的想法是枚举起点j和终点i,然后数一数,分别向前或向后能延伸的最长长度,记为g(i)和f(i).可以先 ...

  7. [学习笔记] C++ 历年试题解析(一)--判断题

    少说话.. 程序题链接:https://www.cnblogs.com/aoru45/p/9898691.html 14级试题---选择题 1. 引用在声明时必须对其初始化,以绑定某个已经存在的变量( ...

  8. Spark 集群环境搭建

    思路: ①先在主机s0上安装Scala和Spark,然后复制到其它两台主机s1.s2 ②分别配置三台主机环境变量,并使用source命令使之立即生效 主机映射信息如下: 192.168.32.100 ...

  9. Python 继承、派生、组合、接口、抽象类

    继承是一种是的关系,和组合对比,组合是一种有的关系,这两者都是解决代用重用问题的 继承 注意:继承不是遗传,在显示角度中,是通过对象抽象成类,再把这些类抽象成一个,就是父类.是自下而上的过程,在程序中 ...

  10. C++调用C语言编译的so文件

    参考链接:https://blog.csdn.net/chenjinlong126/article/details/78990350 一.制作so文件:libadd_c.so或libadd_cpp.s ...