使用 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]: <open file '/tmp/tmp.txt', mode 'r' at 0x1ba6150>
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]: <open file '/tmp/tmp.txt', mode 'w' at 0x1ba6270>
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
123
456
以隻讀模式打開檔案如下:
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
123
456
[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
123
456
[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
123
456
[root@izj6cdhdoq5a5z7lfkmaeaz ~]#