• Python 3学习 ——目录 Json Pickle


    Python 学习

     写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享

    一、学习笔记

      1.__name__

        当__name__在调用中执行时,打印出来的是__main__

    def hello():
        print('hello')
    
    print(__name__)     # __main__
    
    if __name__ =='__main__':
        hello()     #hello

        而当__name__在bin模块中导入后,并不会执行其中的函数,打印出来的__name__为 foo,这样也就是不满足了条件

        if __name__ == '__main__',从而不执行其中的测试代码

    import foo  #foo

        以后写代码时将逻辑代码都放到if __name__ == "__main__":后面,将函数声明都放到这条语句上面。

      2.目录结构

        假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了:

        Foo/
        |-- bin/
        |   |-- foo
        |
        |-- foo/
        |   |-- tests/
        |   |   |-- __init__.py
        |   |   |-- test_main.py
        |   |
        |   |-- __init__.py
        |   |-- main.py
        |
        |-- docs/
        |   |-- conf.py
        |   |-- abc.rst
        |
        |-- setup.py
        |-- requirements.txt
        |-- README

        简要解释一下:

        1. bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
        2. foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py
        3. docs/: 存放一些文档。
        4. setup.py: 安装、部署、打包的脚本。
        5. requirements.txt: 存放软件依赖的外部Python包列表。
        6. README: 项目说明文件。

      3.json 和 pickle

        什么是序列化?

         把对象从内存中变成可存储或传输的过程称之为序列化,在Python中称pickling。序列化之后,就可以把序列化后的内容存入磁盘当中。通过json这个模块去完成序列化这一个内容。

      4.xml 模块

        xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

        xml的格式如下,就是通过<>节点来区别数据结构的:

     1 <?xml version="1.0"?>
     2 <data>
     3     <country name="Liechtenstein">
     4         <rank updated="yes">2</rank>
     5         <year>2008</year>
     6         <gdppc>141100</gdppc>
     7         <neighbor name="Austria" direction="E"/>
     8         <neighbor name="Switzerland" direction="W"/>
     9     </country>
    10     <country name="Singapore">
    11         <rank updated="yes">5</rank>
    12         <year>2011</year>
    13         <gdppc>59900</gdppc>
    14         <neighbor name="Malaysia" direction="N"/>
    15     </country>
    16     <country name="Panama">
    17         <rank updated="yes">69</rank>
    18         <year>2011</year>
    19         <gdppc>13600</gdppc>
    20         <neighbor name="Costa Rica" direction="W"/>
    21         <neighbor name="Colombia" direction="E"/>
    22     </country>
    23 </data>
    XML数据

        xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:

     1 import xml.etree.ElementTree as ET
     2  
     3 tree = ET.parse("xmltest.xml")
     4 root = tree.getroot()
     5 print(root.tag)
     6  
     7 #遍历xml文档
     8 for child in root:
     9     print(child.tag, child.attrib)
    10     for i in child:
    11         print(i.tag,i.text)
    12  
    13 #只遍历year 节点
    14 for node in root.iter('year'):
    15     print(node.tag,node.text)
    16 #---------------------------------------
    17 
    18 import xml.etree.ElementTree as ET
    19  
    20 tree = ET.parse("xmltest.xml")
    21 root = tree.getroot()
    22  
    23 #修改
    24 for node in root.iter('year'):
    25     new_year = int(node.text) + 1
    26     node.text = str(new_year)
    27     node.set("updated","yes")
    28  
    29 tree.write("xmltest.xml")
    30  
    31  
    32 #删除node
    33 for country in root.findall('country'):
    34    rank = int(country.find('rank').text)
    35    if rank > 50:
    36      root.remove(country)
    37  
    38 tree.write('output.xml')
    使用Python操作XML代码

        创建xml文档:

     1 import xml.etree.ElementTree as ET
     2  
     3  
     4 new_xml = ET.Element("namelist")
     5 name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
     6 age = ET.SubElement(name,"age",attrib={"checked":"no"})
     7 sex = ET.SubElement(name,"sex")
     8 sex.text = '33'
     9 name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    10 age = ET.SubElement(name2,"age")
    11 age.text = '19'
    12  
    13 et = ET.ElementTree(new_xml) #生成文档对象
    14 et.write("test.xml", encoding="utf-8",xml_declaration=True)
    15  
    16 ET.dump(new_xml) #打印生成的格式
    创建XML文档

      5.shelve 模块

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

    import shelve
     
    f = shelve.open(r'shelve.txt')
     
    # f['stu1_info']={'name':'alex','age':'18'}
    # f['stu2_info']={'name':'alvin','age':'20'}
    # f['school_info']={'website':'oldboyedu.com','city':'beijing'}
    #
    #
    # f.close()
     
    print(f.get('stu_info')['age'])
  • 相关阅读:
    LightOJ 1030 Discovering Gold(期望)
    CodeForces 567B Berland National Library
    HDU
    HDU
    (模拟、进制转换)
    HDU
    HDU
    CodeForces 429 B B. Working out
    CodeForces 546 D. Soldier and Number Game(素数有关)
    2016中国大学生程序设计竞赛
  • 原文地址:https://www.cnblogs.com/jinzejun/p/8964479.html
Copyright © 2020-2023  润新知