標籤:列表 方法 get bye size 字元 odi jpg 語句
python io編程
要以讀檔案模式開啟一個檔案清單,使用open()函數,並傳入檔案名稱和標識符:
f = open(r‘.1.txt‘,‘r‘)
- 這是第一個
r表示引號裡面的東西不轉義,第二個r 表示讀。
如果檔案成功開啟,我們調用read方法可以一次性讀取全部內容:
f = open(r‘.1.txt‘,‘r‘) f.read() ------------ ‘hello,word!‘
最後一步調用close()方法關閉檔案。
f.close()
由於讀寫檔案時有可能發生錯誤,一旦出錯,後面的f.close()就不會被調用。所有我們使用try.....finally來實現: try: f =open(r‘.1.txt‘,‘r‘) print(f.read()) finally: if f: f.close()
每次這麼寫就太繁瑣了,所以,python引出了with語句來自動調用close()方法:
with open(r‘.1.txt‘,‘r‘) as f: print(f.read())
- 調用
read會一次性讀取檔案的全部內容,如果檔案有10G,記憶體就炸了。
- read(size) 每次讀取
size個位元組的內容
- readline()每次讀取一行內容
- readlines()一次讀取所有內容並返回
list
讀取二進位檔案
>>> f = open(‘/Users/michael/test.jpg‘, ‘rb‘) >>> f.read() b‘\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...‘ # 十六進位表示的位元組
字元編碼
f =open(‘.1.txt‘,‘r‘,encoding = ‘gbk‘,errors=‘ignore‘)
寫檔案
f = open(‘.1.txt‘,‘w‘) f.write(‘hello,word‘) f.close()
python io操作標識符
- ‘r‘ 開放閱讀(預設)
- ‘w‘開啟寫入,先截斷檔案
- ‘x‘ 開啟以進行獨佔建立,如果檔案已存在則失敗
- ‘a‘ 開啟以進行寫入,如果存在則附加到檔案的末尾
- ‘b‘ 二進位模式
- ‘t‘ 文字模式(預設)
- ‘+‘ 開啟磁碟檔案進行更新(讀寫)
StringIO 和ByterIOStringIO
- 很多時候,資料讀寫不一定是檔案,也可能在記憶體中讀取
stringIO顧名思義就是在記憶體中讀取str。
from io import StringIO f = StringIO() f.write(‘hello‘) f.write( ‘ ‘) print(f.getvalue())
要讀取StringIO,可以初始化StringIO,然後,像讀檔案一樣讀取:
from io import StringIO f = StringIO(‘Hello\nHi!\nGoodbye‘) while True: s = f.readline() if s == ‘‘: break print(s.strip())
BytesIO
BytesIO實現了在記憶體中讀取bytes,我們建立一個BytesIO,然後寫入一些bytes
from io import BytesIO f = BytesIO() f.write(‘中午‘.encode(‘utf-8‘)) print(f.getvalue())
操作檔案和目錄
os的準系統
import os os.name --------- ‘nt‘
在作業系統中定義的環境變數,全部儲存在os.environ這個變數中,可以直接查看:
import os os.environ # get 擷取單個環境的變數 os.environ.get(‘PATH‘)
操作檔案和目錄
操作檔案和目錄的函數一部分放在os模組中,一部分放在了os。path中
# 查看目前的目錄的絕對路徑 os.path.abspath(‘.‘) # 在在某個目錄下建立一個新目錄,首先把新目錄的完整路徑表示出來 a=os.path.join(‘/Users/michael‘,‘testdir‘) # 刪除一個目錄 os.rmdir("a") # 建立一個目錄 os.mkdir("a")
- 把兩個路徑合成一個時,不要直接拼接字元,而要通過
os.path.join().這樣可以正確處理兩個作業系統路徑分隔字元不同的情況
同樣,才分路徑的時候用os.path.split()函數
os.path.split(‘/Users/michael\\testdir.txt‘) (‘/Users/michael‘, ‘testdir.txt‘)
os.path.splitext可以直接獲得檔案的副檔名
os.path.splitext(‘/Users/michael\\testdir.txt‘) (‘/Users/michael\\testdir‘, ‘.txt‘)
python IO操作