python文件讀寫操作(24)

以前的代碼都是直接將數(shù)據(jù)輸出到控制臺(tái),實(shí)際上我們也可以通過(guò)讀/寫文件的方式讀取/輸出到磁盤文件中,文件讀寫簡(jiǎn)稱I/O操作。文件I/O操作一共分為四部分:打開(kāi)(open)/讀取(read)/寫入(write)/關(guān)閉(close)……

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出麥蓋提免費(fèi)做網(wǎng)站回饋大家。

python 文件讀寫操作(24)

一.文件的打開(kāi) open

在python中打開(kāi)文件使用函數(shù)open(),該函數(shù)返回文件句柄,具體使用方法如下:

1

2

3

4

5

file=open("文件名","打開(kāi)文件模式")

?

# 示例代碼:

# 打開(kāi)d:/1.txt文件,如果d盤沒(méi)有這個(gè)文件,會(huì)自動(dòng)在d盤創(chuàng)建1.txt的空白文件,file是返回的文件句柄供讀/寫/關(guān)閉文件操作

file=open("d:/1.txt","wb")

其中,打開(kāi)文件模式有以下幾種類型:

python 文件讀寫操作(24)

?

二.文件的關(guān)閉 close

文件在打開(kāi)讀寫之后記得要有關(guān)閉操作,就好比蹲完坑得擦屁股,關(guān)閉文件使用close()函數(shù)。注意:文件關(guān)閉之后,不能在繼續(xù)對(duì)文件讀寫操作,如果需要讀寫操作需要重新open()打開(kāi)文件。

python 文件讀寫操作(24)

?

1

file.close()# 關(guān)閉文件

?

三.文件的讀取 read

文件打開(kāi)之后,可以通過(guò)返回的文件句柄讀取文件中的內(nèi)容,文件讀取有以下幾個(gè)函數(shù):

1.file.read( [count] )?— count表示需要讀取的文字長(zhǎng)度,conut是缺省參數(shù),如果沒(méi)有設(shè)置count值,默認(rèn)讀取整個(gè)文件所有內(nèi)容,該函數(shù)返回讀取到的內(nèi)容;

2.file.readline()?— 讀取文件一行數(shù)據(jù),返回讀取的內(nèi)容

3.file.readlines()?— 讀取文件的所有行內(nèi)容,返回讀取的所有內(nèi)容,注意:返回的數(shù)據(jù)類型是列表,列表中每個(gè)數(shù)據(jù)都是文件中的一行數(shù)據(jù);

4.注意:文件讀取返回的內(nèi)容并非字符串str類型,而是字節(jié)類型bytes類型,b’ ‘前綴代表的就是bytes.??

?

如果想將bytes類型轉(zhuǎn)為字符串直接使用bytes.decode()即可,decode()默認(rèn)使用utf-8編碼;

假如d:/1.txt中的內(nèi)容如下:

1

2

3

@Blog(個(gè)人博客地址):shuopython.com

@WeChatOfficialAccount(微信公眾號(hào)):猿說(shuō)python

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

文件讀取的三種方式示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# 方法一:

print("方法一:使用 read() 函數(shù)讀取txt內(nèi)容")

file_object=open("d:/1.txt","rb")

contents=file_object.read()# 默認(rèn)讀取所有內(nèi)容

?

# 讀取文件內(nèi)容,如果文件中含有中文需要decode()解碼,否則中文無(wú)法顯示

print(contents)

print("---"*20)

# 使用decode()解碼中文,默認(rèn)解碼格式為utf-8

print("使用decode()函數(shù)解碼中文:")

print(contents.decode())

file_object.close()

?

print("***"*20)

# 方法二:

print("方法二:使用 readline() 函數(shù)讀取txt內(nèi)容")

file_object=open("d:/1.txt","rb")

whileTrue:

????contents=file_object.readline()

????print(contents.decode())# 使用decode()解碼中文,默認(rèn)解碼格式為utf-8

????iflen(contents)==0:# 讀取內(nèi)容長(zhǎng)度為0,讀取結(jié)束

????????break

file_object.close()

?

print("***"*20)

# 方法三:

print("方法三:使用 readlines() 函數(shù)讀取txt內(nèi)容")

file_object=open("d:/1.txt","rb")

# readlines() 返回列表,一行數(shù)據(jù)就是列表中的一個(gè)元素

contents=file_object.readlines()

# 遍歷列表

forcontentincontents:

????print(content.decode())# 使用decode()解碼中文,默認(rèn)解碼格式為utf-8

file_object.close()

輸出結(jié)果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

方法一:使用read()函數(shù)讀取txt內(nèi)容

?

b'@Blog(\xe4\xb8\xaa\xe4\xba\xba\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9c\xb0\xe5\x9d\x80): shuopython.com\r\n@WeChat Official Account(\xe5\xbe\xae\xe4\xbf\xa1\xe5\x85\xac\xe4\xbc\x97\xe5\x8f\xb7)\xef\xbc\x9a\xe7\x8c\xbf\xe8\xaf\xb4python\r\n@Motto:\xe4\xb8\x8d\xe7\xa7\xaf\xe8\xb7\xac\xe6\xad\xa5\xe6\x97\xa0\xe4\xbb\xa5\xe8\x87\xb3\xe5\x8d\x83\xe9\x87\x8c\xef\xbc\x8c\xe4\xb8\x8d\xe7\xa7\xaf\xe5\xb0\x8f\xe6\xb5\x81\xe6\x97\xa0\xe4\xbb\xa5\xe6\x88\x90\xe6\xb1\x9f\xe6\xb5\xb7\xef\xbc\x8c\xe7\xa8\x8b\xe5\xba\x8f\xe4\xba\xba\xe7\x94\x9f\xe7\x9a\x84\xe7\xb2\xbe\xe5\xbd\xa9\xe9\x9c\x80\xe8\xa6\x81\xe5\x9d\x9a\xe6\x8c\x81\xe4\xb8\x8d\xe6\x87\x88\xe5\x9c\xb0\xe7\xa7\xaf\xe7\xb4\xaf\xef\xbc\x81\r\n'

------------------------------------------------------------

使用decode()函數(shù)解碼中文:

@Blog(個(gè)人博客地址):shuopython.com

@WeChatOfficialAccount(微信公眾號(hào)):猿說(shuō)python

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

?

************************************************************

方法二:使用readline()函數(shù)讀取txt內(nèi)容

?

@Blog(個(gè)人博客地址):shuopython.com

@WeChatOfficialAccount(微信公眾號(hào)):猿說(shuō)python

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

?

?

************************************************************

方法三:使用readlines()函數(shù)讀取txt內(nèi)容

?

@Blog(個(gè)人博客地址):shuopython.com

@WeChatOfficialAccount(微信公眾號(hào)):猿說(shuō)python

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

?

四.文件的寫入 write

文件寫入可通過(guò)函數(shù)write()完成,使用比較簡(jiǎn)單,先看看語(yǔ)法:

file.write( [bytes] )?— 直接傳入 bytes 類型的字符即可,b”? ?“前綴代表的就是bytes.?

使用比較簡(jiǎn)單,直接上代碼:

1

2

3

4

5

6

7

8

9

file_object=open("d:/2.txt","wb")

?

# '\n' 是文件I/O中的換行符,寫完文件之后,自動(dòng)換行

file_object.write(b"1234567\n")

# 注意單引號(hào)和雙引號(hào)的配合使用

file_object.write(b"file_object.write(b'sad')\n")

file_object.write(b"python \n")

?

file_object.close()

d:/2.txt 的內(nèi)容如下:

1

2

3

1234567

file_object.write(b'sad')

python

注意:寫入方式“wb”?,每次寫入文件都會(huì)覆蓋上一次的內(nèi)容,即寫入之前的內(nèi)容會(huì)被清空;

?

五.文件偏移 seek

有人看了上面read()函數(shù)的示例代碼可能會(huì)覺(jué)得頻繁的打開(kāi)和關(guān)閉文件會(huì)比較麻煩。那么僅僅打開(kāi)和關(guān)閉文件一次,通過(guò)文件的偏移也能完成上述功能,文件的偏移使用?seek()?函數(shù) 。一般而言,seek()函數(shù)和tell()函數(shù)都搭配使用:

1.file.seek([offset],[whence])?— whence 表示偏移的位置,0代表從文件開(kāi)頭開(kāi)始算起,1代表從當(dāng)前位置開(kāi)始算起,2代表從文件末尾算起;offset 表示相對(duì)whence 偏移多少個(gè)字節(jié);

2.file.tell()?— 相對(duì)于文件開(kāi)始位置,當(dāng)前偏移的字節(jié)數(shù),該函數(shù)也可以用來(lái)計(jì)算整個(gè)文件的bytes長(zhǎng)度;

注意:一般只要調(diào)用read/readline/readlines/write等函數(shù),文件指針會(huì)自動(dòng)發(fā)生偏移。

使用上面兩個(gè)函數(shù)的示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

file_object=open("d:/2.txt","rb")

?

# 獲取當(dāng)前的文件偏移,由于還沒(méi)開(kāi)始讀取內(nèi)容,偏移量等于 0

count=file_object.tell()

print(count)

# 讀取文本所有數(shù)據(jù)內(nèi)容,文件自動(dòng)偏移到文件末尾

contents=file_object.read()

# 獲取整個(gè)文件的偏移量 ,實(shí)際上就是文件內(nèi)容的大小

count=file_object.tell()

print(count)

# 將文件指針偏移到文件開(kāi)始位置

file_object.seek(0,0)

# 讀取一行數(shù)據(jù),按道理講應(yīng)該是獲取第一行數(shù)據(jù)

contents=file_object.readline()

print(contents.decode())

# 獲取當(dāng)前偏移量

count=file_object.tell()

print(count)

# 繼續(xù)讀取一行數(shù)據(jù)

contents=file_object.readline()

print(contents.decode())

# 獲取當(dāng)前偏移量

count=file_object.tell()

print(count)

file_object.close()

輸出內(nèi)容:

1

2

3

4

5

6

0

474

python教程-猿說(shuō)python:第一行數(shù)據(jù)www.shuopython.com

68

python教程-猿說(shuō)python:第二行數(shù)據(jù)www.shuopython.com

136

?

六.重點(diǎn)總結(jié)

1.file.read( [count] )函數(shù)可以設(shè)置讀取指定的長(zhǎng)度,例如:只讀取10個(gè)字符read(10);

2.file.readlines()返回值是列表,并非bytes類型,而列表中的每一個(gè)元素都是文件中的一行數(shù)據(jù),類型是bytes類型;

3.如果文件讀取的內(nèi)容含有中文,需要通過(guò)函數(shù)decode()解碼轉(zhuǎn)為字符串,decode()默認(rèn)為utf-8解碼;

4.文件open之后記得close,養(yǎng)成良好的書(shū)寫習(xí)慣;

?

?

猜你喜歡:

1.python列表推導(dǎo)式

2.python字典推導(dǎo)式

3.python return邏輯運(yùn)算

?

轉(zhuǎn)載請(qǐng)注明:猿說(shuō)Python???python文件讀寫操作

分享名稱:python文件讀寫操作(24)
URL網(wǎng)址:http://muchs.cn/article42/pdjshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、關(guān)鍵詞優(yōu)化、域名注冊(cè)、響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)