使用for迴圈遍歷檔案

2021-09-21 03:20:38 字數 3951 閱讀 5512

使用 python 訪問檔案,首先得先開啟檔案,在 python 下開啟檔案可以使用 open 內建函式

open

r——以唯讀方式開啟

w——以寫的方式開啟

a——以追加模式開啟

r+——以讀寫模式開啟

w+——以讀寫模式開啟(參見w)

a+——以讀寫模式開啟(參見a)

rb——以二進位制讀模式開啟(binary)

wb——以二進位制寫模式開啟(參見w)

ab——以二進位制追加模式開啟(參見a)

rb+——以二進位制讀寫模式開啟(參見r+)

wb+——以二進位制讀寫模式開啟(參見w+)

ab+——以二進位制讀寫模式開啟(參見a+)

with open

我們試著開啟乙個檔案如下:

in [1]: open('/tmp/tmp.txt')

out[1]:

in [2]: fd=open('/tmp/tmp.txt') #用乙個引數fd接收一下

in [3]: type(fd) #可以看到fd是檔案型別

out[3]: file

檔案會有很多方法可以使用,比如 fd.close,開啟乙個檔案也需要關閉它:

in

[4]: fd.

fd.close

fd.flush

fd.next

fd.seek

fd.writelines

fd.closed

fd.isatty

fd.read

fd.softspace

fd.xreadlines

fd.encoding

fd.mode

fd.readinto

fd.tell

fd.errors

fd.name

fd.readline

fd.truncate

fd.fileno

fd.newlines

fd.readlines

fd.write

in[5]: fd

.close() #關閉檔案

然後我們再已讀寫的方式開啟之前那個檔案:

in [6]: fd=open('/tmp/tmp.txt','w')          #以讀寫的方式開啟這個檔案

in [7]: fd

out[7]:

in [8]: fd.wri

fd.write fd.writelines

in [8]: fd.write("a") #往檔案裡面寫入乙個a,在這個時候會覆蓋檔案原有的內容

in [9]: fd.clo

fd.close fd.closed

in [9]: fd.close() 接著我們關閉這個檔案

接著我們以讀寫的方式寫入乙個「123」,然後再往檔案裡面追加乙個「456」:

in [10]: fd=open('/tmp/tmp.txt','w')

in [11]: fd.write("123\n")

in [12]:

in [12]: fd.close()

in [13]:

in [13]: fd=open('/tmp/tmp.txt','a')

in [14]: fd.write("456\n")

in [15]: fd.close()

檔案內容變化如下:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt

123[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt

123456

以唯讀模式開啟檔案如下:

in [16]: fd=open('/tmp/tmp.txt','r')

in [17]: fd.read()

out[17]: '123\n456\n'

in [18]: fd.read()

'''因為讀取第二遍的時候是往後讀取的,

後面沒有內容,所以返回的就是空的'''

out[18]: ''

in [19]: fd.read()

out[19]: ''

read方法的比較:

in [19]: fd.read()                  #返回的是乙個字串

out[19]: ''

in [20]: fd.readline() #返回的是乙個字串

out[20]: ''

in [21]: fd.readlines() #返回的是乙個列表

out[21]:

我們把開啟乙個檔案的操作指令碼寫入乙個檔案:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py

#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")

for i in fd.readlines():

print(i)

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py

123456

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

由上面我們可以看到開啟檔案內容缺省會顯示空行,我們去掉空行,如下所示:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py       

#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")

for i in fd.readlines():

print(i,end='')

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py

123456

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

我們一般建議在實際讀取檔案的時候去掉 read 方法,因為當檔案非常大的時候,讀取出來將消耗很大一部分的記憶體,一般直接進行如下**即可:

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat openfile.py   

#!/usr/local/python3/bin/python

fd=open("/tmp/tmp.txt")

for i in fd: #這樣遍歷的就是乙個物件,物件會一行一行的取值讀出來

print(i,end='')

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

[root@izj6cdhdoq5a5z7lfkmaeaz ~]# python openfile.py

123456

[root@izj6cdhdoq5a5z7lfkmaeaz ~]#

使用for迴圈遍歷檔案 使用while迴圈遍歷檔案

1 開啟檔案讀 開啟檔案,從頭到尾讀完後,再執行read 就沒有了 關閉後就不能讀 readlines 和readline 區別 readline 一行一行讀取,返回字串,當指標到檔案末尾後,返回空 readlines 整個內容都輸出,再輸入,返回空 fd.next 和readline 差不多,不過...

Python迴圈遍歷檔案

for遍歷檔案 open aaa.py r readline 遍歷aaa.py的第一行,每個字元作為一行 open aaa.py r readlines 遍歷整個aaa.py文件,源文件一行作為遍歷的一行 open aaa.py r read 遍歷整個aaa.py文件,每個字元作為一行 r 表示已唯...

Python 迴圈遍歷檔案

python中開啟檔案需要使用內建函式open open name mode buffering 啟動mode和buffering 是可選的,預設情況下mode是r r 以讀方式開啟 w 以寫方式開啟 檔案不存在會建立,存在的話,會清空檔案,很危險 a 以追加的方式開啟 r 以讀寫模式開啟 w 以讀...