zoukankan      html  css  js  c++  java
  • python 之 序列化与反序列化、os模块

    6.6 序列化与反序列化

    • 特殊的字符串 , 只有:int / str / list / dict

    • 最外层必须是列表或字典,如果包含字符串,必须是双引号"".

    • 序列化:将Python的值转换为json格式的字符串.

    • 反序列化:将json格式的字符串转换成Python的数据类型.

    • 优点:所有语言通用

      缺点:只能序列化基本的数据类型.

    6.61 json.dumps

    序列化:内存中的数据类型----》转成一种中间格式(字符串)----》存到文件中

    import json
    with open('db.json','wb') as f:
    dic={'name':'egon','age':18}
    res=json.dumps(dic) # json格式全都是双引号
    print(res,type(res)) # {"name": "egon", "age": 18} <class 'str'>
    f.write(res.encode('utf-8'))

    6.62 json.loads

    反序列化:文件----》读取中间格式(字符串)------》转成内存中数据类型

    import json
    with open('db.json','r',encoding='utf-8') as f:
       data=f.read()
       dic=json.loads(data)
       print(dic,type(dic)) # {'name': 'egon', 'age': 18} <class 'dict'>
       print(dic['name']) # egon

    6.63 json.dump

    import json
    with open('db1.json','wt',encoding='utf-8') as f:
       dic={'name':'egon','age':18}
       json.dump(dic,f)

    6.64 json.load

    import json
    with open('db1.json','rt',encoding='utf-8') as f:
        dic=json.load(f)
        print(dic['name']) # egon

    6.65 pickle序列化

    优点: Python中所有的东西都能被序列化(除socket对象)

    缺点: 序列化的内容只有Python认识.

    import pickle                   # pickle.dumps
    s={1,2,3,4,}
    res=pickle.dumps(s)
    print(res,type(res)) # <class 'bytes'> ,转成bytes类型
    with open('db.pkl','wb') as f:
        f.write(res)
    import pickle                   # pickle.dump
    s={1,2,3}
    with open('db1.pkl','wb') as f:
       pickle.dump(s,f)

    6.66 pickle反序列化

    with open('db.pkl','rb') as f:      # pickle.loads
       data=f.read()
       print(data)
       s=pickle.loads(data)
       print(s,type(s))   # {1, 2, 3, 4} <class 'set'>
     with open('db1.pkl','rb') as f:    #=pickle.load
        s=pickle.load(f)
        print(s,type(s))               # {1, 2, 3} <class 'set'>

    6.7 os模块

    os.path系列

    • os.path.abspath(path) 返回path规范化的绝对路径

      import os
      file_path=r'acd.txt'
      print(os.path.abspath(file_path)) #C:UsersDesktopacd.txt
    • os.path.split(path) 将path分割成目录和文件名二元组返回

      res=os.path.split(r'C:acd.txt')
      print(res) # ('C:\a\b\c', 'd.txt')
      print(res[-1]) # d.txt
      print(res[0]) # C:ac
    • os.path.isabs(path) 如果path是绝对路径,返回True

      print(os.path.isabs(r'b/c/d.txt'))  # False
    • os.path.normcase(path) 在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠

      print(os.path.normcase('C:/Windows\system32\') ) # c:windowssystem32
    • os.path.dirname(path) 返回path的目录 其实就是os.path.split(path)的第一个元素

      import os
      BASE_DIR=os.path.dirname(os.path.dirname(__file__)) #__file__当前文件地址
      print(BASE_DIR) # os.path.dirname() 获取上一级地址路径
    • os.path.normpath( ) 规范化路径,如 .. 和 /

      print(os.path.normpath('c://windows\System32\../Temp/'))  #'c:\windows\Temp' 

      a='/Users/jieli/test1/\a1/\\aa.py/../..' #/Users/jieli/test1
      print(os.path.normpath(a))
    • os.path.join( path1 [ , path2 [ , ... ] ] ) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

      print(os.path.join('C:\','a','b','a.txt'))         #C:aa.txt
      print(os.path.join('C:\','a','D:\','b','a.txt')) #D:a.txt 第一个c:a被忽略
      print(os.path.join('a','b','a.txt')) #aa.txt
      res=os.path.normpath(os.path.join(__file__,'..','..'))
      print(res)  #C:UsersDesktopday15下午
    • os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素

      print(os.path.basename(r'C:acd.txt'))      # d.txt
    • os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False, 只管路径是否存在,不区分文件还是文件夹

      print(os.path.exists(r'D:codeSH_fullstack_s1day15下午json.py'))  #True
      print(os.path.exists(r'D:codeSH_fullstack_s1day15')) #True
    • os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

      print(os.path.isfile(r'D:codeSH_fullstack_s1day15下午'))          #False
    • os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

      print(os.path.isdir(r'D:codeSH_fullstack_s1day15下午'))           #True
    • os.path.getsize(path) 返回path的大小

      res=os.path.getsize(r'D:codeSH_fullstack_s1day15上午settings.py') # 单位是字节
      print(res)

    6.71 os路径处理

    方式一:推荐使用

    import os
    import os,sys
    possible_topdir = os.path.normpath(os.path.join( os.path.abspath(__file__),
       os.pardir, #上一级
       os.pardir,
       os.pardir
    ))
    sys.path.insert(0,possible_topdir)

    方式二:不推荐使用

    import os
    import os,sys
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    sys.path.insert(0,BASE_DIR)

    6.8 包的使用

  • 相关阅读:
    JavaScript.how-to-debug-javascript
    iOS.mach_absolute_time
    Startup.国外新锐公司及其技术Blog
    Android.FamousBlogs
    iOS.PrototypeTools
    Android.API.Context.getFilesDir()
    Android.Tools.Ant
    Tools.OnlineAPIs
    Java.Class
    Android.StructureOfAndroidSourceCodeRootTree
  • 原文地址:https://www.cnblogs.com/mylu/p/11061598.html
Copyright © 2011-2022 走看看