Python3的讀寫文件,os模塊,序列化

一。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()循環形成了與原始數據結構相同的新數據結構。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章