使用 Python 訪問文件,首先得先打開文件,在 Python 下打開文件能夠使用 open 內置函數python
openide
r——以只讀方式打開
w——以寫的方式打開
a——以追加模式打開
r+——以讀寫模式打開
w+——以讀寫模式打開(參見w)
a+——以讀寫模式打開(參見a)
rb——以二進制讀模式打開(binary)
wb——以二進制寫模式打開(參見w)
ab——以二進制追加模式打開(參見a)
rb+——以二進制讀寫模式打開(參見r+)
wb+——以二進制讀寫模式打開(參見w+)
ab+——以二進制讀寫模式打開(參見a+)函數
with openspa
咱們試着打開一個文件以下:code
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()
文件內容變化以下:it
[root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt 123 [root@izj6cdhdoq5a5z7lfkmaeaz ~]# [root@izj6cdhdoq5a5z7lfkmaeaz ~]# cat /tmp/tmp.txt 123 456
以只讀模式打開文件以下:class
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 ~]#