python 檔案file操作(2)
阿新 • • 發佈:2018-11-06
檔案的屬性
所謂屬性,就是能夠通過一個檔案物件得到的東西。
>>> f = open("m1.txt","a")
>>> f.name
'm1.txt'
>>> f.mode #顯示當前檔案開啟的模式
'a'
>>> f.closed #檔案是否關閉,如果關閉,返回True;如果開啟,返回False
False
>>> f.close() #關閉檔案的內建函式
>>> f.closed
True
檔案的有關狀態
>>> import os >>> file_stat = os.stat("m1.txt") #檢視這個檔案的狀態 >>> file_stat #檔案狀態是這樣的。從下面的內容,有不少從英文單詞中可以猜測出來。 posix.stat_result(st_mode=33204, st_ino=5772566L, st_dev=2049L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=69L, st_atime=1407897031, st_mtime=1407734600, st_ctime=1407734600) >>> file_stat.st_ctime #這個是檔案建立時間 1407734600.0882277 #換一種方式檢視這個時間 >>> import time >>> time.localtime(file_stat.st_ctime) #這回看清楚了。 time.struct_time(tm_year=2014, tm_mon=8, tm_mday=11, tm_hour=13, tm_min=23, tm_sec=20, tm_wday=0, tm_yday=223, tm_isdst=0)
以上關於檔案狀態和檔案屬性的內容,在對檔案的某些方面進行判斷和操作的時候或許會用到。特別是檔案屬性。比如在操作檔案的時候,我們經常要首先判斷這個檔案是否已經關閉或者開啟,就需要用到file.closed這個屬性來判斷了。
檔案的內建函式
>>> 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'] >>>
實驗:
>>> f = open("m1.txt","r")
>>> f.read()
'My name is hiekay.\nMy website is hiekay.github.io\nAha,I like program\n'
>>>
file.read()能夠將檔案中的內容全部讀取過來。特別注意,這是返回一個字串,而且是將檔案中的內容全部讀到記憶體中。試想,如果內容太多是不是就有點慘了呢?的確是,千萬不要去讀大個的檔案。
>>> contant = f.read() >>> type(contant) <type 'str'>
如果檔案比較大了,就不要一次都讀過來,可以轉而一行一行地,用readline
>>> f = open("m1.txt","r")
>>> f.readline() #每次返回一行,然後指標向下移動
'My name is hiekay.\n'
>>> f.readline() #再讀,再返回一行
'My website is hiekay.github.io\n'
>>> f.readline()
'Aha,I like program\n'
>>> f.readline() #已經到最後一行了,再讀,不報錯,返回空
''
讀多行,readlines()
>>> f = open("m1.txt","r")
>>> cont = f.readlines()
>>> cont
['My name is hiekay.\n', 'My website is hiekay.github.io\n', 'Aha,I like program\n']
>>> type(cont)
<type 'list'>
>>> for line in cont:
... print line
...
My name is hiekay.
My website is hiekay.github.io
Aha,I like program
從實驗中我們可以看到,readlines和read有一樣之處,都是將檔案內容一次性讀出來,存放在記憶體,但是兩者也有區別,read返回的是str型別,readlines返回的是list,而且一行一個元素,因此,就可以通過for逐行打印出來了。
在print line中,注意觀察list裡面的每個元素,最後都是一個\n結尾,所以列印的結果會有空行。
對付大點的檔案,推薦這麼做:
>>> f = open("m1.txt","r")
>>> f
<open file 'm1.txt', mode 'r' at 0xb757c230>
>>> type(f)
<type 'file'>
>>> for line in f:
... print line
...
My name is hiekay.
My website is hiekay.github.io
Aha,I like program
以上都是讀檔案的內建函式和方法。除了讀,就是要寫。所謂寫,就是將內容存入到檔案中。用到的內建函式是write。但是,要寫入檔案,還要注意開啟檔案的模式,可以是w,也可以是a,看具體情況而定。
>>> f = open("m1.txt","a") #因為這個檔案已經存在,我又不想清空,用追加的模式
>>> f.write("There is a baby.") #這句話應該放到檔案最後
>>> f.close() #請看官注意,寫了之後,一定要及時關閉檔案。才能代表真正寫入
看看寫的效果:
>>> f = open("m1.txt","r")
>>> for line in f.readlines():
... print line
...
My name is hiekay.
My website is hiekay.github.io
Aha,I like program
There is a baby. #果然增加了這一行
以上是關於檔案的基本操作。高階 : pickle這個模組,是一個很好用的東西。