一。Python語言讀寫文件的函數
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode的幾個參數:
r 只能讀 r+ 可讀可寫 從頂部開始寫,覆蓋之前位置的內容 不創建不存在文件 rb 讀取二進制文件 不創建不存在文件 w 寫 不創建不存在文件 文件存在則,覆蓋之前文件 w+ 可讀可寫 創建不存在文件 文件存在則,覆蓋之前文件 wb 寫入二進制文件 創建不存在文件 文件存在則,覆蓋之前文件 a 從底部開始添加內容 創建不存在文件 a+ 可讀可寫 從文件頂部讀取,從文件底部寫入 創建不存在文件
ps:w+ a+ 必須在寫入數據後,使用seek(0)將光標移動到開頭,否則無法讀取全部數據
下面來具體的代碼感受下:
f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('創建了text2文件') #文件不存在,創建
f.seek(0) #定位光標到文件開頭
print(f.read()) #讀取全部內容
f.close()
f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('更改') #文件存在,覆蓋文件
print(f.read())
f.close()
f=open('text.txt',mode='r',encoding='UTF-8')
print(f.read()) #讀取文件
f.close()
f=open('text.txt',mode='r+',encoding='UTF-8')
f.write('青島') #文件存在,覆蓋之前位置的內容
print(f.read()) #讀取文件
f.close()
f=open('text.txt',mode='a',encoding='UTF-8')
f.write('\n謝謝觀賞')#底部添加
f.close()
f=open('text.txt',mode='a+',encoding='UTF-8')
f.write('\n2018年兒童節')#底部添加
print(f.read()) #從頂部讀取
f.close()
file的方法:
read(size) 有參數則爲讀取size個字節,無參數則讀取所有內容
readline(size) 讀取一行
tell() 返回當前標記位置,以文件開頭爲原點
seek(offset[,whence])
- offset 偏移量
- whence 光標移動基點 0代表文件開頭 1代表當前標記位置 2代表文件末尾
writelines(seq) 迭代字符串序列添加
具體代碼:
f=open('text.txt',mode='a+',encoding='UTF-8')
str=['啥家庭啊\n','開開心心']
f.writelines(str)
f.seek(0)
print(f.readline().rstrip()) #讀取一行
print(f.tell())
f.close()
二。操作文件
Python os 模塊提供了非常豐富的方法用來處理文件和目錄
mkdir() 創建目錄
rmdir() 移除目錄
remove() 移除文件
rename() 修改文件或目錄名
listdir()返回當前文件夾所有文件的名字組成的列表
getcwd() 返回當前所在路徑
話不多說。代碼如下:
import os
os.mkdir('test') #創建目錄
os.rename('aaa.txt','demo1.txt') #修改文件或目錄名
os.remove('ccc.txt') #移除文件
print(os.getcwd()) #返回當前路徑
print(os.listdir()) #返回當前位置所有文件的名字,組裝爲列表
os.rmdir('demo') #刪除目錄
三。Python序列化和反序列化
在Python中,序列化和反序列化是通過“Pickle”庫實現的。
Pickle有兩個主要的方法。第一個是將對象放到文件中的轉儲。第二種方法是從文件對象加載對象的加載。
Pickle必須在二進制模式下使用,否則會造成文件數據的破壞
pickle.dump(data,file) 將數據data序列化到file文件流中
pickle.load(file) 讀取流對象緩衝區數據,並實例化爲新的數據對象返回
代碼實現:
import pickle
data={'a':[1,2,3],
'b':'bb','c':None}
#序列化
with open('ccc.txt','wb') as f: #使用with 可以讓file自動關閉
pickle.dump(data, f) #將字典序列化保存到ccc.txt中
# 反序列化
with open('ccc.txt','rb') as f:
print(pickle.load(f))
pickle.dump()和pickle.load()循環形成了與原始數據結構相同的新數據結構。