python 檔案file操作 1

2021-09-20 00:05:33 字數 4271 閱讀 9688

>>> dir(file)

['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

在某個資料夾下面建立了乙個檔案,名曰:m1.txt,並且在裡面輸入了如下內容:

learn python

下圖顯示了這個檔案的儲存位置:

在上面截圖中,我在當前位置輸入了python(我已經設定了環境變數,如果你沒有,需要寫全啟動python命令路徑),進入到互動模式。在這個互動模式下,這樣操作:

>>> f = open("m1.txt")     #開啟已經存在的檔案

>>> for line in f:

... print line

...learn python

將開啟的檔案,賦值個變數f,這樣也就是變數f跟物件檔案m1.txt用線連起來了(物件引用)。

接下來,用for來讀取檔案中的內容,就如同讀取乙個前面已經學過的序列物件一樣,如list、str、tuple,把讀到的檔案中的每行,賦值給變數line。也可以理解為,for迴圈是一行一行地讀取檔案內容。每次掃瞄一行,遇到行結束符號\n表示本行結束,然後是下一行。

從列印的結果看出,每一樣跟前面看到的檔案內容中的每一行是一樣的。只是行與行之間多了一空行,前面顯示文章內容的時候,沒有這個空行。或許這無關緊要,但是,還要深究一下,才能豁然。

在原文中,每行結束有本行結束符號\n,表示換行。在for語句彙總,print line表示每次列印完line的物件之後,就換行,也就是列印完line的物件之後會增加乙個\n。這樣看來,在每行末尾就有兩個\n,即:\n\n,於是在列印中就出現了乙個空行。

>>> f = open('m1.txt')

>>> for line in f:

... print line, #後面加乙個逗號,就去掉了原來預設增加的\n了,看看,少了空行。

...learn python

在進行上述操作的時候,有沒有遇到這樣的情況呢?

>>> f = open('m1.txt')

>>> for line in f:

... print line,

...learn python

>>> for line2 in f: #在前面通過for迴圈讀取了檔案內容之後,再次讀取,

... print line2 #然後列印,結果就什麼也顯示,這是什麼問題?

...>>>

如果看官沒有遇到上面問題,可以試試。遇到了,這就解惑。不是什麼錯誤,是因為前一次已經讀取了檔案內容,並且到了檔案的末尾了。再重複操作,就是從末尾開始繼續讀了。當然顯示不了什麼東西,但是python並不認為這是錯誤,因為後面就會講到,或許在這次讀取之前,已經又向檔案中追加內容了。那麼,如果要再次讀取怎麼辦?就重新來一邊好了。

特別提醒看官,因為當前的互動模式是在該檔案所在目錄啟動的,所以,就相當於這個實驗室和檔案m1.txt是同乙個目錄,這時候我們開啟檔案m1.txt,就認為是在本目錄中開啟,如果檔案不是在本目錄中,需要寫清楚路徑。

>>> f = open("m1.txt")

traceback (most recent call last):

file "", line 1, in ioerror: [errno 2] no such file or directory: 'm1.txt'

>>> f = open("***/m1.txt") #必須得寫上路徑了(注意,windows的路徑是\隔開,需要轉義。對轉義符,看官看以前講座)

>>> for line in f:

... print line

...learn python

>>>

上面的實驗中,開啟的是乙個已經存在的檔案。如何建立檔案呢?

>>> nf = open("m2.txt","w")

>>> nf.write("this is a file")

這次我們同樣是用open()這個函式,但是多了個"w",這是在告訴python用什麼樣的模式開啟檔案。也就是說,用open()開啟檔案,可以有不同的模式開啟。看下表:

模式描述

r以讀方式開啟檔案,可讀取檔案資訊。

w以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容

a以追加模式開啟檔案(即一開啟檔案,檔案指標自動移到檔案末尾),如果檔案不存在則建立

r+以讀寫方式開啟檔案,可對檔案進行讀和寫操作。

w+消除檔案內容,然後以讀寫方式開啟檔案。

a+以讀寫方式開啟檔案,並把檔案指標移到檔案尾。

b以二進位制模式開啟檔案,而不是以文字模式。該模式只對windows或dos有效,類unix的檔案是用二進位制模式進行操作的。

從表中不難看出,不同模式下開啟檔案,可以進行相關的讀寫。那麼,如果什麼模式都不寫,像前面那樣呢?那樣就是預設為r模式,唯讀的方式開啟檔案。

>>> f = open("m1.txt")

>>> f

>>> f = open("m1.txt","r")

>>> f

可以用這種方式檢視當前開啟的檔案是採用什麼模式的,上面顯示,兩種模式是一樣的效果。下面逐個對各種模式進行解釋

"w":以寫方式開啟檔案,可向檔案寫入資訊。如檔案存在,則清空該檔案,再寫入新內容

m2.txt這個檔案是存在的,前面建立的,並且在裡面寫了一句話:this is a file

>>> fp = open("m2.txt")

>>> for line in fp: #原來這個檔案裡面的內容

... print line

...this is a file

>>> fp = open("m2.txt","w") #這時候再看看這個檔案,裡面還有什麼呢?是不是空了呢?

>>> fp.write("my name is hiekay.\nmy website is hiekay.github.io") #再檢視內容

>>> fp.close()

檢視檔案內容:

$ cat m2.txt  #cat是linux下顯示檔案內容的命令,這裡就是要顯示m2.txt內容

my name is hiekay.

my website is hiekay.github.io

"a":以追加模式開啟檔案(即一開啟檔案,檔案指標自動移到檔案末尾),如果檔案不存在則建立

>>> fp = open("m2.txt","a")

>>> fp.write("\naha,i like program\n") #向檔案中追加

>>> fp.close() #這是關閉檔案,一定要養成乙個習慣,寫完內容之後就關閉

檢視檔案內容:

$ cat m2.txt

my name is hiekay.

my website is hiekay.github.io

aha,i like program

python 檔案file操作 1

dir file class delattr doc enter exit format getattribute hash init iter new reduce reduce ex repr setattr sizeof str subclasshook close closed encodi...

File檔案操作

open public static filestream open string path,filemode mode filemode createnew 指定作業系統應建立新檔案。此操作需要 fileiopermissionaccess.write。如果檔案已存在,則將引發 ioexcepti...

Python對檔案file的操作

file 操作 my file open file.txt w 在當前目錄中建立檔名為 file.txt 的檔案 my file.write something 向檔案中寫入資料 my file.close 關閉檔案 my file open filename r 唯讀方式開啟 my file.re...