python基礎(chǔ)語法(9)
內(nèi)置模塊
json
json模塊中常用的有兩個方法客情,分別為:
dumps()
將python中的字典類型轉(zhuǎn)化為json對象镜盯。-
loads()
將json對象轉(zhuǎn)化為字典類型。代碼示例:
import json # 字典對象 dict_lesson={ "name":"python", "score":3 } # json.dumps 將Python 字典類型轉(zhuǎn)換為 JSON 對象 # json.loads 將 JSON 對象轉(zhuǎn)換為 Python 字典 print(dict_lesson['score']) json_lesson=json.dumps(dict_lesson) print(type(json_lesson)) #str print(type(json.loads(json_lesson))) #dict
-
dump()
將Python內(nèi)置類型序列化為json對象后寫入文件
代碼示例:
# 寫入文件
def writefile(user):
try:
with open('./util/users.json','w') as fp:
list_user = [user]
json.dump(list_user,fp)
fp.close()
except Exception as ex:
print(ex)
-
load()
讀取文件中json形式的字符串元素 轉(zhuǎn)化成python類型
代碼示例:# 讀取文件 def readfile(): try: with open('./util/users.json','r') as fp: content = json.load(fp) fp.close() return content except Exception as ex: print(ex)
文件讀寫
-
文件的打開和關(guān)閉open()
fp = open(file_name [,access_mode][,buffering])
各參數(shù)的細節(jié):
- file_name: 要訪問的文件名稱,包括擴展名。
- access_mode: 打開文件的模式(只讀r;寫入w妥色;追加a)默認為只讀
- buffering:當它為0時不會有寄存,取1時訪問文件會寄存遏片,當大于1時嘹害,這個值就是寄存區(qū)的緩沖大小吮便;為負值時說明寄存去緩沖大小為系統(tǒng)默認笔呀。
-
File對象的屬性
# 打開一個文件 fo = open("foo.txt", "w") print "文件名: ", fo.name #返回true如果文件已被關(guān)閉,否則返回false髓需。 print "是否已關(guān)閉 : ", fo.closed #返回被打開文件的訪問模式许师。 print "訪問模式 : ", fo.mode #如果用print輸出后,必須跟一個空格符僚匆,則返回false微渠。否則返回true。 print "末尾是否強制加空格 : ", fo.softspace fo.close()
-
打開模式
標識 模式 說明 r 只讀 文件不存在報錯 w 只寫 文件不存在,新建文件 a 追加 文件不存在,新建文件 r+ 可讀寫 文件不存在報錯,先讀取文件咧擂,然后才能寫入文件逞盆,反之,寫不進內(nèi)容 w+ 可讀寫 寫讀取文件松申,然后就無法讀文件了云芦。。贸桶。舅逸。 a+ 可讀寫 同上,原因是文件指針的位置決定了
* r 就是直接打開已存在的文件,不存在會報錯
* w 就是打開文件皇筛,文件如果不存在琉历,就會新建一個文件
* r+ 是打開一個可讀寫的文件,文件必須存在水醋,而且在讀之后旗笔,需要加一句:f.seek(),不然會報錯
## *******************************文件讀寫模式:r+ *********************************
f = open(unicode(r"C:\測試\2樣.txt", "utf8"), 'r+')
str1 = f.read()
print str1
f.seek(0离例,0)
f.write("this is seek(0)")
# f.flush()
f.close()
- write()
用來將任意字符寫入一個打開的文件换团。不局限與文字悉稠。
write()方法寫入的位置取決于光標的位置宫蛆,寫入時不換行。
如果寫入的不是字符串,需要先進行類型轉(zhuǎn)換:
f = open("/tmp/foo1.txt", "w")
value = ('www.runoob.com', 14)
s = str(value)
f.write(s)
f.flush()
# 關(guān)閉打開的文件
f.close()
-
read()讀取文件
fo=open('content2.txt','r+') str=fo.read() print(str) fo.close()
readline() readlines()
fo=open('content2.txt','r+')
str1=fo.readline()
#指針移動到第二行耀盗,讀出所有行放到一個數(shù)組中
str2=fo.readlines()
print(str1)
print(str2)
fo.close()
```
```
for line in fo:
print(line, end='')
tell()
返回文件對象所在的位置想虎,它是從文件開頭開始算起的字節(jié)數(shù)。-
seek()
用來改變當前的文件位置叛拷。
- seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
- seek(x,1) : 表示從當前位置往后移動x個字符
- seek(-x,2):表示從文件的結(jié)尾往前移動x個字符
-
pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列和反序列化
通過pickle模塊的序列化操作我們能夠?qū)⒊绦蛑羞\行的對象信息保存到文件中去舌厨,永久存儲。
通過pickle模塊的反序列化操作忿薇,我們能夠從文件中創(chuàng)建上一次程序保存的對象裙椭。
基本接口:
pickle.dump(obj, file, [,protocol]
import pickle
# 使用pickle模塊將數(shù)據(jù)對象保存到文件 data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
read_file.py
``` #!/usr/bin/python3 import pprint, pickle #使用pickle模塊從文件中重構(gòu)python對象 pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) print(data1['a']) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()
-
flush()刷新緩沖區(qū)
將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件,同時清空緩沖區(qū)署浩。
一般來說揉燃,.close()方法會自動調(diào)用flush()方法。
如果需要關(guān)閉前刷新緩沖區(qū)筋栋,就可以使用flush()方法炊汤。