Python3入门(十一)——IO编程
一、文件讀寫
python的文件操作和C是兼容的
1.讀文本文件
讀文件操作如下:
f = open("F:/1.txt", "r") data = f.read() print(data)其中"r"表示read,讀文件,再使用read()方法就把文件內(nèi)容讀取出來(lái)了
和Java一樣,操作文件需要close掉,并且強(qiáng)烈建議在finally中close,代碼如下:
try:f = open("F:/1.txt", "r")data = f.read()print(data) finally:if f:f.close()但是!Python這里又支持了with操作,這比Java必須要寫上面類似的代碼確實(shí)要簡(jiǎn)潔不少:
with open("F:/1.txt", "r") as f:print(f.read())這樣,try finally以及close等全部可以省略了!
這里read()也可以加參數(shù)size來(lái)限制讀取的字節(jié)數(shù),防止一次性讀取太多而爆掉:
print(f.read(4))或者按行讀取也是闊以的:
readline() # 讀取一行 readlines() # 讀取所有行,返回listfor line in f.readlines():print(line.strip()) # 把末尾的'\n'刪掉
這種帶有read()方法的對(duì)象稱為 file-like Object,常見(jiàn)的有StringIO
2.讀二進(jìn)制文件
使用rb模式打開(kāi)即可:
f = open("F:/1.jgp", "rb") f.read()3.字符編碼
默認(rèn)是UTF-8,指定編碼可以添加encoding參數(shù)
f = open("F:/1.txt", "r", encoding="GBK") f.read()??忽略一些亂七八糟的錯(cuò)誤,可以使用errors:
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')4.寫文件
和讀類似,w、wb進(jìn)行文本文件、二進(jìn)制文件的寫,文件編碼同讀文件的操作
with open("F:/1_new.txt", "w") as f:f.write("Hello Python3!")w是覆蓋寫的形式,追加使用a參數(shù),完整參照文檔
二、StringIO與BytesIO
1.StringIO
在內(nèi)存中讀寫string,稱之為StringIO。它可以在內(nèi)存中進(jìn)行讀寫:
from io import StringIOf = StringIO() f.write("Hello ") f.write("Python3!") print(f.getvalue())可以像文件一樣進(jìn)行操作:
from io import StringIOf = StringIO("Hello\nPython3!") while True:line = f.readline()if line == "":breakprint(line.strip())? 2.bytesIO
f2 = BytesIO() f2.write("我愛(ài)中國(guó)".encode("UTF-8"))注意這里寫入的不是字符串string,而是經(jīng)過(guò)編碼后的bytes
三、操作文件和目錄
使用例如dir cp等操作文件的命令,可以通過(guò)Python的os模塊來(lái)實(shí)現(xiàn),底層是通過(guò)調(diào)用系統(tǒng)的接口進(jìn)行具體實(shí)現(xiàn)的:
>>> import os >>> os.name # 操作系統(tǒng)類型 'posix'——代表linux,nt代表windows,linux中還可以通過(guò)os.uname()來(lái)獲取更加詳細(xì)的信息1.獲取環(huán)境變量:
>>> os.environ #查看所有環(huán)境變量 >>> os.environ.get('PATH') #獲取特定變量2.操作文件和目錄
os.path中的部分操作:
# 查看當(dāng)前目錄的絕對(duì)路徑: >>> os.path.abspath('.') '/Users/michael' # 在某個(gè)目錄下創(chuàng)建一個(gè)新目錄,首先把新目錄的完整路徑表示出來(lái): >>> os.path.join('/Users/michael', 'testdir') '/Users/michael/testdir' # 然后創(chuàng)建一個(gè)目錄: >>> os.mkdir('/Users/michael/testdir') # 刪掉一個(gè)目錄: >>> os.rmdir('/Users/michael/testdir')請(qǐng)注意路徑的操作不要直接強(qiáng)行通過(guò)字符串拆分合并進(jìn)行,而是使用os模塊的方法!
更多操作,參見(jiàn)相關(guān)文檔
四、序列化
python通過(guò)?pickle?模塊進(jìn)行序列化操作!
pickle.dumps()方法把任意對(duì)象序列化成一個(gè)bytes,然后,就可以把這個(gè)bytes寫入文件?;蛘哂昧硪粋€(gè)方法pickle.dump()直接把對(duì)象序列化后寫入一個(gè)file-like Object:
>>> import pickle >>> d = dict(name='Bob', age=20, score=88) >>> pickle.dumps(d)>>> f = open('dump.txt', 'wb') >>> pickle.dump(d, f) >>> f.close()反序列化方法通過(guò)load方法實(shí)現(xiàn):
>>> f = open('dump.txt', 'rb') >>> d = pickle.load(f) >>> f.close()與JSON轉(zhuǎn)換:
類似Java的fastjson等對(duì)象與json的轉(zhuǎn)換,python提供了json模塊用來(lái)提供json字符串與dict的轉(zhuǎn)換。好處與便利性不再贅述:
>>> import json >>> d = dict(name='Bob', age=20, score=88) >>> json.dumps(d) #返回一個(gè)json的str字符串 '{"age": 20, "score": 88, "name": "Bob"}'類似的,也提供了鏡像方法loads,返回與JSON對(duì)應(yīng)的dict
>>> json.loads(json_str)JSON與對(duì)象的轉(zhuǎn)換:
上面介紹了默認(rèn)的JSON字符串與dict的轉(zhuǎn)換,當(dāng)然肯定要有class對(duì)象與JSON的轉(zhuǎn)換了:
主要通過(guò)dumps()參數(shù)列表,實(shí)現(xiàn)一個(gè)class到dict的轉(zhuǎn)換函數(shù)即可:
def student2dict(std):return {'name': std.name,'age': std.age,'score': std.score}>>> print(json.dumps(s, default=student2dict)) {"age": 20, "name": "Bob", "score": 88}?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangbei/p/8946343.html
總結(jié)
以上是生活随笔為你收集整理的Python3入门(十一)——IO编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从智能合约到智能资产
- 下一篇: Python的os.walk()方法详细