日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python3入门(十一)——IO编程

發(fā)布時(shí)間:2025/4/14 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3入门(十一)——IO编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、文件讀寫

  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() # 讀取所有行,返回list
for 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。