特殊的字符串 , 只有:int / str / list / dict json
最外層必須是列表或字典,若是包含字符串,必須是雙引號"".windows
序列化:將Python的值轉換爲json格式的字符串.socket
函數
優勢:全部語言通用ui
缺點:只能序列化基本的數據類型.spa
序列化:內存中的數據類型----》轉成一種中間格式(字符串)----》存到文件中code
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'))
反序列化:文件----》讀取中間格式(字符串)------》轉成內存中數據類型orm
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
import json
with open('db1.json','wt',encoding='utf-8') as f:
dic={'name':'egon','age':18}
json.dump(dic,f)
import json
with open('db1.json','rt',encoding='utf-8') as f:
dic=json.load(f)
print(dic['name']) # egon
優勢: 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)
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'>
os.path系列
os.path.abspath(path) 返回path規範化的絕對路徑
import os
file_path=r'a\b\c\d.txt'
print(os.path.abspath(file_path)) #C:\Users\Desktop\a\b\c\d.txt
os.path.split(path) 將path分割成目錄和文件名二元組返回
res=os.path.split(r'C:\a\b\c\d.txt')
print(res) # ('C:\\a\\b\\c', 'd.txt')
print(res[-1]) # d.txt
print(res[0]) # C:\a\b\c
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:\windows\system32\
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:\a\b\a.txt
print(os.path.join('C:\\','a','D:\\','b','a.txt')) #D:\b\a.txt 第一個c:\a被忽略
print(os.path.join('a','b','a.txt')) #a\b\a.txt
res=os.path.normpath(os.path.join(__file__,'..','..'))
print(res) #C:\Users\Desktop\day15\下午
os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
print(os.path.basename(r'C:\a\b\c\d.txt')) # d.txt
os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False, 只管路徑是否存在,不區分文件仍是文件夾
print(os.path.exists(r'D:\code\SH_fullstack_s1\day15\下午\json.py')) #True
print(os.path.exists(r'D:\code\SH_fullstack_s1\day15')) #True
os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False
print(os.path.isfile(r'D:\code\SH_fullstack_s1\day15\下午')) #False
os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False
print(os.path.isdir(r'D:\code\SH_fullstack_s1\day15\下午')) #True
os.path.getsize(path) 返回path的大小
res=os.path.getsize(r'D:\code\SH_fullstack_s1\day15\上午\settings.py') # 單位是字節
print(res)
方式一:推薦使用
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)