天天看點

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

本文執行個體講述了Python3.5檔案讀與寫操作。分享給大家供大家參考,具體如下:

1、檔案操作的基本流程:

(1)打開檔案,得到檔案句柄并指派給一個變量

(2)通過句柄對檔案進行操作

(3)關閉檔案

2、基本操作舉例:

現有一個命名為song.txt的檔案,裡面存放最喜愛的英文歌,内容如下:

take me to your heart

hiding from the rain and snow

藏身于雨雪之中

trying to forget but i won't let go

努力忘記,但我怎能就這樣離去

looking at a crowded street

看着熙熙攘攘的街道

listening to my own heart beat

卻隻能聽見自己的心跳

so many people all around the world

這麼多的人在世界上

tell me where do i find someone like you girl

請告訴我在哪裡可以找到像你一樣的女孩

take me to your heart take me to your soul

将我留存心間與你的靈魂相伴

give me your hand before i'm old

給我你的手,在我老去之前

show me what love is haven't got a clue

問情為何物在我們彼此離開前

show me that wonders can be true

問奇迹上演

they say nothing lasts forever

他們說沒有什麼可以天長地久

we're only here today

我們也能此時相守

love is now or never

現在或者永不回頭

bring me far away

請帶我一起遠走

take me to your heart take me to your soul

讓我靠近你的心與你的靈魂相伴

give me your hand and hold me

給我你的手擁我入懷

show me what love is be my guiding star

問情為何物讓星辰照亮我路

it's easy take me to your heart

其實愛我真的很簡單以

在另一個命名為file_operation.py的檔案中編寫代碼,使得以“utf-8”的編碼格式将檔案song.txt打開,并且讀取該檔案,将讀取的内容傳回到一個變量lyric中并列印出來。

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

lyric = open("song",encoding="utf-8").read()

print(lyric)

運作結果将song.txt檔案的内容列印出來:截圖部分如下

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

3、檔案基本操作

檔案句柄:打開檔案的傳回值為檔案句柄(檔案的記憶體對象),對檔案進行操作的是操作檔案句柄。

(1)讀檔案内容

f = open("song",encoding="utf-8") #打開檔案的傳回值為檔案句柄(檔案的記憶體對象)

lyric = f.read() #讀檔案

print(lyric) #列印讀取内容

(2)寫檔案内容

f = open("song2",'w',encoding="utf-8") #w:隻寫模式。不存在的檔案則建立;存在則覆寫原來檔案的内容

f.write("Take me to your heart\n")

f.write("帶我走進你的心")

f.close()

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(3)在檔案後邊追加内容

f = open("song2",'a',encoding="utf-8") #a:追加模式。不存在的檔案則建立;存在隻追加内容

f.write("\nTake me to your soul\n")

f.write("帶我走進你的心靈")

f.close()

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(4)檔案打開模式總結

.r,隻讀模式(預設)。

.w,隻寫模式。【不可讀;不存在的檔案則建立;存在則覆寫原來檔案的内容】

.a,追加模式。【不可讀; 不存在則建立;存在則隻追加内容】

4、檔案讀操作

(1)檔案讀操作——讀檔案的第一行——調用:句柄.readline()

f = open("song",'r',encoding="utf-8")

first_line = f.readline() #讀取第一行

print(first_line)

運作結果:

take me to your heart

(2)檔案讀操作——利用循環讀取檔案的前5行:

f = open("song",'r',encoding="utf-8")

for i in range(5):

print(f.readline().strip())

運作結果:

take me to your heart

hiding from the rain and snow

藏身于雨雪之中

trying to forget but i won't let go

努力忘記,但我怎能就這樣離去

句柄.readlines()将檔案的内容以每行作為一個元素轉換成一個清單

f = open("song",'r',encoding="utf-8")

print(f.readlines())

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(3)檔案讀操作——利用句柄.readlines()循環讀取檔案的内容:

f = open("song",'r',encoding="utf-8")

for line in f.readlines():

print(line.strip())

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(4)檔案讀操作——利用句柄.readlines()循環讀取檔案的内容并處理特殊的行:

f = open("song",'r',encoding="utf-8")

for index,line in enumerate(f.readlines()):

if index == 5:

print("------------")

continue

print(line.strip())

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(5)高效讀取檔案:當檔案的内容很大時,采用readlines的方式需要先把檔案轉換成清單,耗費時間太長,記憶體裡裝不下太大的檔案。

采用周遊并列印句柄的方式可以高效的實作檔案的讀取,這種方式采用一行行讀取檔案方式,記憶體裡面每次隻儲存一行。

f = open("song",'r',encoding="utf-8")

for line in f:

print(line.strip())

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(6)高效讀取檔案——處理特殊行

count = 0

f = open("song",'r',encoding="utf-8")

for line in f:

if count == 3:

print("-------------")

count+=1

continue

print(line.strip())

count += 1

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

5、檔案讀完之後,檔案句柄的指針移動到檔案的末尾,想從頭再讀一遍,需要将指針移回到開始位置。

(1)檢視檔案句柄的指針指向的位置,調用.tell(),已讀取的字元的個數即為計數的值(也是檔案句柄指針指向的位置)。

f = open("song",'r',encoding="utf-8")

print(f.tell())

print(f.readline().strip()) #讀取第一行

print(f.tell())

運作結果:

take me to your heart

23

f = open("song",'r',encoding="utf-8")

print(f.tell())

print(f.read(6)) #讀取字元的個數

print(f.tell())

運作結果:

take m

6

(2)移動檔案句柄指針,使其回到某個位置,調用.seek(指針的位置)

f = open("song",'r',encoding="utf-8")

print(f.tell())

print(f.readline().strip()) #讀取第一行内容

print(f.tell()) #列印檔案句柄指針的位置

f.seek(0) #檔案句柄指針回到起始位置

print(f.tell())

f.seek(30) #檔案句柄指針回到第30個字元的位置

print(f.readline().strip()) #從第30個字元開始讀一行内容

print(f.tell()) #列印讀取之後指針的位置

運作結果:

take me to your heart

23

from the rain and snow

54

6、列印檔案的編碼類型——調用:句柄.encoding()

f = open("song",'r',encoding="utf-8")

print(f.encoding) #列印檔案的編碼類型

運作結果:

utf-8

7、列印檔案的名字——調用:句柄.name

f = open("song",'r',encoding="utf-8")

print(f.name) #列印檔案名字

運作結果:

song

8、判斷檔案是否可讀——調用:句柄.readable()

判斷檔案是否可寫——調用:句柄.writable()

判斷檔案是否已經關閉——調用:句柄.closed()

判斷檔案句柄指針是否可移動——調用:句柄.seekable(),tty檔案和終端裝置檔案的句柄指針不能移動

f = open("song",'r',encoding="utf-8")

print(f.readable()) #判斷檔案是否可讀

print(f.seekable()) #判斷檔案句柄指針是否可移動

print(f.writable()) #判斷檔案是否可寫

運作結果:

True

True

False

9、以寫的模式打開一個檔案,剛寫完一行,突然斷電,寫的内容就沒有寫入硬碟當中,而是在記憶體的緩存中(硬碟的速度比記憶體慢)。

原本等到寫入的内容在記憶體的緩存中滿了,再一起寫入硬碟中,調用句柄.flush()表示強制重新整理到硬碟裡面。

舉例:動态列印字元:每隔0.1秒在螢幕輸出列印一個#,一個列印20個

import sys,time

for i in range(20):

sys.stdout.write("#") #向螢幕标準輸出寫入的字元

sys.stdout.flush() #強制重新整理

time.sleep(0.1) #休眠時間

運作結果

####################

10、截斷檔案裡面的内容——調用:句柄.truncate() 沒有寫參數,不做任何操作

調用:句柄.truncate(10) 參數10,代表從檔案開頭,截斷10個字元

f = open("song",'a',encoding="utf-8")

f.truncate(20) #從起始位置截斷20個字元

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

11、"+" 表示可以同時讀寫某個檔案

(1)r+ 讀寫模式,注:寫的内容從檔案的最後面開始寫入(寫等同于追加),即:【可讀;可寫;可追加】

f = open("song",'r+',encoding="utf-8") #r+表示讀寫模式

for line in range(3):

print(f.readline().strip())

f.write("-----------")

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解
python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(2)w+ 寫讀模式(應用不多):先建立一個檔案然後再向裡面寫内容,注:寫的内容從檔案的最後面開始寫入(寫等同于追加)

f = open("song",'w+',encoding="utf-8")

f.write("-----------\n")

f.write("-----------\n")

f.write("-----------\n")

print(f.readline())

f.seek(14)

f.write("==========")

print(f.readline())

f.close()

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解
python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(3).a+ 追加讀模式

12、"b"表示處理二進制檔案(如:FTP發送上傳ISO鏡像檔案,linux可忽略,windows處理二進制檔案時需标注)

應用:在網絡傳輸隻能用二進制模式進行傳輸;所有的二進制檔案(如:視訊)用二進制模式。

(1)二進制檔案——讀

f = open("song",'rb') #"b"表示處理二進制檔案

for line in range(3):

print(f.readline())

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

(2)二進制檔案——寫

f = open("song",'wb') #"b"表示處理二進制檔案--寫

f.write("Hello World\n".encode()) #需要将字元串編碼成位元組包(二進制格式)才能夠寫入

f.close()

運作結果:

python經典程式詳解執行個體_Python3.5檔案讀與寫操作經典執行個體詳解

13、"U"表示在讀取時,可以将 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

(1)rU

(2)r+U

希望本文所述對大家Python程式設計有所幫助。