zoukankan      html  css  js  c++  java
  • 哗啦啦Python之路

    模块

    1. configparser

    configparser的作用如下:给一个特定格式的文件,这个模块帮你去找特定的东西。它的东西用open也能实现,只是它更方便。

    特定格式如下:

    [section1]
    k1 = 123
    k2:v2

    [section2]
    k1 = 567

    使用步骤如下:

    1) 把文件交给configparser

    config = configparser.ConfigParser()#创建机器
    config.read("1.txt",encoding = "utf-8")

    2) 检查节点 (section)

    has_sec = config.has_section("section1")
    print(has_sec)

    3) 获取所有节点

    ret = config.sections()
    print(ret)

    4)获取指定节点下的键值对

    ret = config.items("section1")
    print(ret) #output: [('k1', '123'), ('k2', 'v2')]

    5)获取指定节点下的所有键(option)

    ret = config.options("section1")
    print(ret) #output: ['k1', 'k2']

    6)获取指定节点的指定key的值

    ret = config.get("section1","k1")
    print(ret)

    7)删除节点

    config.remove_section("section3")
    config.write(open("1.txt","w"))

    8)添加节点

    config.add_section("section3")
    config.write(open("1.txt","w"))

    9)键值对的操作跟上面一样,只是把section改成option

    10) 设置键值对

    config.set("section1","k10","123")
    config.write(open("1.txt","w"))

    2. XML

    1)将文件或者字符串读取,获取节点

    from xml.etree import ElementTree as ET
    
    #如果XML是文件
    tree = ET.parse("2.xml") #把文件搞到内存里,这个tree叫ElementTree
    root = tree.getroot() #节点
    print(root,root.tag,root.attrib) #节点标签名,属性
    #每个节点都是element对象
    
    
    #如果XML是字符串,比如说网站上的那种
    str_xml = open("2.xml","r").read() #可以替换成request返回值
    root = ET.XML(str_xml)#字符串类型的XML

    2)读取节点和节点里面的节点

    for child in root:
        print(child.tag, child.attrib)#每个孩子也都是一个节点
        for grandson in child:
            print(grandson.tag,grandson.attrib,grandson.text) #孙子也都是节点
    
    for node in root.iter("year"):
        print(node.tag, node.text)

    3) 修改节点内容,记住,所有修改都是在内存中,所以要回写到文件里

    for node in root.iter("year"):
        new_year = int(node.text) +1
        node.text = str(new_year) #将内容里面的时间都加一年
        node.set("name","alex") #设置属性
        del node.attrib["name"] #删除属性
    #保存文件
    tree = ET.ElementTree(root) #elementtree用来保存文件
    tree.write("2.xml",encoding = "utf-8")

    4)创建节点

    tree = ET.parse("2.xml") #把文件搞到内存里,这个tree叫ElementTree
    root = tree.getroot() #节点
    ele = ET.Element("alex",attrib = {"age":"18"}) #创建一个element类的对象,因为节点是element
    ele.text = "我是内容"
    root.append(ele)
    tree.write("3.xml",encoding = "utf-8")

    5) 创建XML

    #如何创建xml
    root = ET.Element("family") #创建根节点
    son1 = ET.Element("son",{"name":"li"})
    grandson = ET.Element("grandson",{"name":"hehe"})
    son1.append(grandson)
    root.append(son1)
    tree = ET.ElementTree(root)
    #tree.write("son.xml",encoding = "utf-8")
    # #或者用下面这个方式son1 = root.makeelement("son",{"name":"li"})son2 = ET.SubElement(root,"son",{"name":"li"})

    6) 加自动缩进

    #加自动缩进
    from xml.dom import minidom
    def prettify(ele):
        rough_string =ET.tostring(ele,"utf-8")
        reparsed = minidom.parseString(rough_string)
        return reparsed.toprettyxml(indent = "	")
    raw_str = prettify(root)
    tree.write("son.xml",encoding="utf-8")
    f = open("son.xml","w")
    f.write(raw_str)
    f.close()

    3. shutil 高级文件,文件夹,压缩包,处理模块

    import shutil
    
    #拷贝文件内容
    shutil.copyfileobj(open("1.txt","r"),open("2.txt","w"))
    
    #拷贝文件
    shutil.copyfile("1.txt","2.txt")
    
    #递归地去拷贝文件夹
    shutil.copytree("folder1","folder2",ignore = shutil.ignore_patterns("*.pyc"))
    
    #创建压缩包并返回路径,这是将文件夹下面的内容打包放置当前程序目录
    ret = shutil.make_archive("1.txt","gztar",root_dir="/user/test")
    
    import zipfile #压缩模块
    z = zipfile.ZipFile("1.zip","w") #将a.log装到这个zip包里面
    z.write("a.log")
    z.close()
    
    z = zipfile.ZipFile("1.zip","r")#解压
    z.extractall()
    z.namelist() #压缩包里所有的文件名
    z.extract("1.txt") #单独解压压缩包里某个文件
    z.close()

    2) 压缩,解压

    import tarfile
    
    压缩
    tar = tarfile.open("your.tar","w")
    tar.add("1.txt",arcname = "1.txt")
    tar.close()
    
    解压
    tar.extractall() #可设置解压地址
    
    tar = tarfile.open("your.tar","r")
    for item in tar.getmembers():
        print(item)
    obj = tar.getmember("1.txt")
    tar.extract(obj)
    tar.close()

    面向对象

    1. 面向对象编程实现:发送邮件的功能

    #如果是函数发送邮件,下面这种写法
    def mail(email,message):
        print("发送")
        return True
    
    mail("hui_zhang_fiona@163.com","gg")
    
    #如果是面向对象:发送邮件的功能
    class Foo:
        #函数如果放到类里面,这叫方法
        def mail(self,email,message):
            print("发送")
            return True
    #调用方法
    # 1)创建对象,类名后面加()
    obj = Foo()
    obj.mail("hui_zhang_fiona@163.com","gg")

    2. 面向对象的适用范围:对象里能封装参数,这样就不用每次调用对象方法的时候传参数了。

    如果一对函数有共同的参数,那么就用面向对象,将参数值一次性封装到对象

    class SQLHelper:
        def fetch(self,sql):
            print(self.hhost)
            print(self.uusername)
            print(self.pwd)
            pass
        def remove(self, sql):
            pass
        def create(self, sql):
            pass
        def modify(self, sql):
            pass
    
    obj = SQLHelper()
    obj.hhost = "salt.com"
    obj.uusername = "fiona"
    obj.pwd = "123"
    obj.fetch("select*from SQL")

    3. self是什么?self是一个python自动回给传值的参数,就是上面那个obj

    #类里面有个特殊的方法叫init,自动被执行,这个叫构造方法
    class SQLHelper:
        def __init__(self,host,username):#构造方法,对象自动执行
            print("自动执行init方法")
            self.hhost = host
            self.username = username
            self.create('sss") #可以类里面调用方法,类里面没有顺序
        def fetch(self,sql):
            print(self.hhost)
            print(self.username)
        def createself, sql):
            pass
    
    obj = SQLHelper("salt.com","alex")
    obj.fetch("heheh")

    4. 创建人物,掉血

    class role():
        def __init__(self,name,age,gender,initial_fight):
            self.name = name
            self.age = age
            self.gender = gender
            self.initial_fight = int(initial_fight)
            if self.initial_fight <= 1000:
                print("死了")
        def dachai(self):
            self.initial_fight -= 100
            print(("{} {} {} {}").format(self.name,self.age,self.gender,self.initial_fight))
        def Kachai(self):
            self.initial_fight -= 100
            print(("{} {} {} {}").format(self.name, self.age, self.gender, self.initial_fight))
    
    a = role("小名",18,"male","1000")
    a.dachai()

    5. 面向对象三大特性:封装,继承,多态

    1) 继承

    
    
    class Animal:
        def eat(self):
            print("")
        def foo(self):
            print(self.name)
    class cat(Animal): #继承。Cat是子类,Animal是父类
        def __init__(self,name):
            self.name = name
        def cry(self):
            print("")
    
    class dog(Animal):
        def cry(self):
            print("")
    
    haha = cat("haha")
    haha.eat()
    haha.foo()
    
    

    2)多继承

    #多继承
    class S0:
        def F1(self):
            print("0")
    
    class S1(S0):
        pass
    
    class S2:
        def F1(self):
            print("2")
    
    class S3(S1,S2): #谁在前面先继承谁
        pass
    
    obj = S3()
    obj.F1()
     
  • 相关阅读:
    C++ STL之vector详解
    Two Sum
    The Skyline Problem
    C++ 排序函数 sort(),qsort()的用法
    GO语言为结构体排序
    php将数组或字符串写入文件
    [Zabbix] 怎样实现邮件报警通知以及免费短信报警通知
    js 图片轮转
    ios学习之旅------玩转结构体
    You have ettempted to queue to many files.You may select one files.
  • 原文地址:https://www.cnblogs.com/hualala/p/5600803.html
Copyright © 2011-2022 走看看