使用 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 以讀...