python一些 檔案操作
阿新 • • 發佈:2018-12-12
如何讀寫文字檔案
python2中文字檔案讀寫
f = open("py2.txt","w")
s = u"你好"
f.write(s.encode('gbk'))
f.close()
f = open('py2.txt','r')
t = f.read()
print(t)
print(t.decode('gbk'))
python3中文字檔案讀寫
f = open("py3.txt","wt",encoding='utf8') f.write("你好") f.close() f = open("py3.txt","rt",encoding='utf8') s = f.read() print(s) #自動幫助我們完成了編解碼,其實讀取寫入的還是位元組
如何處理二進位制檔案?
以WAV格式為例子
wav是一種音訊檔案的格式,為二進位制
前44位元組為頭部資訊
包括 聲道數 取樣頻率 PCM位寬等等
後面是音訊取樣資料
使用 vlc demo.wav播放 f = open('demo.wav','rb') #頭部資訊 info = f.read(44) import struct shengdaoshu = struck.unpack('h',info[22:24]) # h 小段位元組序 caiyangpinlv = struck.unpack('i',info[24:28]) # int bianmakuandu = struck.unpack('h',info[34:36]) import array f.seek(0,2) f.tell() n=(f.tell()-44)/2 buf = array.array('h',(0 for _ in xrange(n))) f.seek(44) f.readinto(buf) # 把資料讀入buf中 for i in xrange(n):buf[i] /=8 f2 = open('demo2.wav','wb') f2.write(info) buf.tofile(f2) f2.close()
如何設定檔案的緩衝
IO操作
磁碟是屬於塊裝置
寫入一個位元組 和 寫入4096個位元組 耗時是一樣的
檔案的緩衝分為
全緩衝 ,緩衝區有一定大小,滿足條件
行緩衝,終端換行符
無緩衝,串列埠裝置,時時的。
f = open("",buffering=2048) 全緩衝
f = open("",buffering=1) 行緩衝
f = open("",buffering=0) 無緩衝
如何將文字對映到記憶體
應用場景
1.將整個檔案 對映到記憶體中,像訪問陣列一樣訪問檔案
當修改陣列的時候,檔案也同時被修改
2.某些嵌入式裝置,我們對映 /dev/mem某範圍
3.多個程序對映同一個檔案,還能實現程序通訊的目的
#建立一個二進位制檔案
dd if=/dev/zero of=demo.bin bs=1024 count=1024
#16進位制檢視這個檔案
od -x demo.bin
import mmap
f = open('demo.bin','r+b')
#檔案描述符,0是整個檔案。access 寫許可權
m = mapp.mapp(f.fileno(),0,access=mmap.ACCESS_WRITE)
m[0] = '\x88'
m[4:8] = '\xff' * 4
offset = 記憶體頁的整數倍
如何訪問檔案的狀態
1 檔案型別
2 檔案的訪問許可權
3 檔案的最後訪問 修改 節點狀態
4 檔案的大小…等等
使用os 系統呼叫 stat fstat lstat
import os
import stat
s = os.stat('a.txt')
stat.S_ISDIR(s.st_mode) #判斷是否為資料夾
stat.S_ISREG(s.st_mode)
快捷函式
os.path.isdir('x.txt')
os.path.islink('x.txt')
os.path.isfile('x.txt')
三個時間
getatime getctime getmtime
普通檔案大小
getsize
如何使用臨時檔案
感測器每收集1G資料,進行資料分析
如果常駐記憶體,消耗大量的記憶體資源
使用臨時檔案,不需要命名,且關閉後會被刪除掉
from tempfile import TemporaryFile,NamedTemporaryFile
f = TemporaryFile()
f.write('abcde'*1000)
只能由物件f來訪問,不能由系統路徑來訪問
ntf = NamedTemporaryFile()
ntf.name
# /tmp/tmp8Zs8Rc 臨時檔案建立在這個下面
臨時檔案關閉後,會被刪除
不刪除的話, ntf = NamedTemporaryFile(delete=False)