1. 程式人生 > >PythonCookBook 筆記 chapter-05-檔案I/O

PythonCookBook 筆記 chapter-05-檔案I/O

open函式及引數點選開啟連結

1, 開啟文字檔案的兩種模式

filename = 'file.py'

# 對文字檔案的讀寫rt/wt, 對二進位制資料的讀寫rb/wb
# 離開with語句塊後,檔案自動關閉
with open(filename, 'rt') as fObj:
    data = fObj.read()
    print(data)

# open要和close配對使用
fObj = open(filename, 'rt')
data = fObj.read()
print(data)
fObj.close()

# 重定向到檔案中
with open('new.txt', 'wt') as fObj:
    print('Helloworld', file=fObj)

2, os.path

import os

path = './somefile.txt'
print(os.path.basename(path)) # 檔名
print(os.path.dirname(path)) # 目錄名
print(os.path.join('tmp', 'test', os.path.basename(path)))

print(os.path.exists('./somefile.txt')) # 檔案是否存在
print(os.path.isfile('./somefile.txt')) # 是否是檔案
print(os.path.isdir('./somefile.txt')) # 是否是目錄

out:
somefile.txt
.
tmp\test\somefile.txt
True
True
False

3, os.listdir

names = os.listdir('./')
print(names)
pyfiles = [name for name in os.listdir('./') if name.endswith('.py')]
print(pyfiles)

out:
['.idea', 'character.py', 'data.json', 'file.py', 'new.txt', 'somefile.txt', 'splitObj.py', 'tcp_serv.py']
['character.py', 'file.py', 'splitObj.py', 'tcp_serv.py']

4, 臨時檔案和目錄

tempfile.TemporaryFile()

tempfile.TemporaryDirectory()

5, 序列化Python物件

import pickle

data = {'Leon':22, 'Mary':21}
with open('somefile.txt', 'wb') as fObj:
    pickle.dump(data, fObj) # 轉儲到檔案dump

with open('somefile.txt', 'rb') as fObj:
    data = pickle.load(fObj) # 從檔案中位元組流建立物件
    print(data)


data = {'Leon':212, 'Mary':121}
strData = pickle.dumps(data) # 轉儲到string
print(strData)
print(pickle.loads(strData)) # 從string中建立物件

out:

{'Leon': 22, 'Mary': 21}
b'\x80\x03}q\x00(X\x04\x00\x00\x00Leonq\x01K\xd4X\x04\x00\x00\x00Maryq\x02Kyu.'
{'Leon': 212, 'Mary': 121}