http://blog.alexa-pro.cn/?p=197
1.打開檔案代碼如下:
>>> f = open(”d:test.txt”, “w”)
說明:第一個參數是檔案名稱,包括路徑;第二個參數是打開的模式mode’r':隻讀(預設。如果檔案不存在,則抛出錯誤)’w':隻寫(如果檔案 不存在,則自動建立檔案)’a':附加到檔案末尾’r+’:讀寫如果需要以二進制方式打開檔案,需要在mode後面加上字元”b”,比如”rb”"wb” 等
2.讀取内容f.read(size)參數size表示讀取的數量,可以省略。如果省略size參數,則表示讀取檔案所有内容。 f.readline()讀取檔案一行的内容f.readlines()讀取所有的行到數組裡面[line1,line2,...lineN]。在避免将 所有檔案内容加載到記憶體中,這種方法常常使用,便于提高效率。
3.寫入檔案f.write(string) 将一個字元串寫入檔案,如果寫入結束,必須在字元串後面加上”n”,然後f.close()關閉檔案
4.檔案中的内容定位f.read()讀取之後,檔案指針到達檔案的末尾,如果再來一次f.read()将會發現讀取的是空内容,如果想再次讀取全部内容,必須将定位指針移動到檔案開始:
f.seek(0)這個函數的格式如下(機關是bytes):f.seek(offset, from_what)from_what表示開始讀取的位置,offset表示從from_what再移動一定量的距離,比如f.seek(10, 3)表示定位到第三個字元并再後移10個字元。from_what值為0時表示檔案的開始,它也可以省略,預設是0即檔案開頭。下面給出一個完整的例 子:>>> f = open(’/tmp/workfile’, ‘r+’)
>>> f.write(’0123456789abcdef’)
>>> f.seek(5) # Go to the 6th byte in the file
>>> f.read(1)
‘5′
>>> f.seek (-3, 2) # Go to the 3rd byte before the end
>>> f.read(1)
‘d’
5.關閉檔案釋放資源檔案操作完畢,一定要記得關閉檔案f.close(),可以釋放資源供其他程式使用
#打開檔案和進行寫操作
--------------------------------
f=open(’test.txt’,'w’)
f.write(’hello’)
f.writelines(['hi','haha'])#多行輸入
f.close()
#append data
f=open(’test.txt’,'a’)
f.write(’hello’)
f.writelines(['hi','haha'])
f.close()
#連續寫入後會自動關閉
open(’test.txt’,'a’).write(’11111rn’)
#把result裡的元素依次填到open函數裡去
result={’hello’,'u’}
exec open(’test.txt’) in result
#
selected = [] # temp list to hold matches
fp = open(’test.txt’)
for line in fp.readlines(): # Py2.2 -> “for line in fp:”
selected.append(line)
del line # Cleanup transient variable
#
open(’test.txt’).readlines()
file在python是一個特殊的類型,它用于在python程式中對外部的檔案進行操作。在python中一切都是對象,file也不例外,file有file的方法和屬性。下面先來看如何建立一個file對象:
* file(name[, mode[, buffering]])
file()函數用于建立一個file對象,它有一個别名叫open(),可能更形象一些,它們是内置函數。來看看它的參數。它參數都是以字元串的形式傳遞的。
name是檔案的名字。
mode 是打開的模式,可選的值為r w a U,分别代表讀(預設) 寫 添加支援各種換行符的模式。用w或a模式打開檔案的話,如果檔案不存在,那麼就自動建立。此外,用w模式打開一個已經存在的檔案時,原有檔案的内容會被清 空,因為一開始檔案的操作的标記是在檔案的開頭的,這時候進行寫操作,無疑會把原有的内容給抹掉。由于曆史的原因,換行符在不同的系統中有不同模式,比如 在 unix中是一個n,而在windows中是’rn’,用U模式打開檔案,就是支援所有的換行模式,也就說’r’ ‘n’ ‘rn’都可表示換行,會有一個tuple用來存貯這個檔案中用到過的換行符。不過,雖說換行有多種模式,讀到python中統一用n代替。在模式 字元的後面,還可以加上+ b t這兩種辨別,分别表示可以對檔案同時進行讀寫操作和用二進制模式、文本模式(預設)打開檔案。
buffering如果為0表示不進行緩沖;如果為1表示進行”行緩沖”;如果是一個大于1的數表示緩沖區的大小,應該是以位元組為機關的。
file對象有自己的屬性和方法。先來看看file的屬性。
--------------------------------------
closed #标記檔案是否已經關閉,由close()改寫
encoding #檔案編碼
mode #打開模式
name #檔案名
newlines #檔案中用到的換行模式,是一個tuple
softspace #boolean型,一般為0,據說用于print
file的讀寫方法:
* F.read([size]) #size為讀取的長度,以byte為機關
* F.readline([size])
#讀一行,如果定義了size,有可能傳回的隻是一行的一部分
* F.readlines([size])
#把檔案每一行作為一個list的一個成員,并傳回這個list。其實它的内部是通過循環調用readline()來實作的。如果提供size參數,size是表示讀取内容的總長,也就是說可能隻讀到檔案的一部分。
* F.write(str)
#把str寫到檔案中,write()并不會在str後加上一個換行符
* F.writelines(seq)
#把seq的内容全部寫到檔案中。這個函數也隻是忠實地寫入,不會在每行後面加上任何東西。
file的其他方法:
* F.close()
#關閉檔案。python會在一個檔案不用後自動關閉檔案,不過這一功能沒有保證,最好還是養成自己關閉的習慣。如果一個檔案在關閉後還對其進行操作會産生ValueError
* F.flush()
#把緩沖區的内容寫入硬碟
* F.fileno()
#傳回一個長整型的”檔案标簽”
* F.isatty()
#檔案是否是一個終端裝置檔案(unix系統中的)
* F.tell()
#傳回檔案操作标記的目前位置,以檔案的開頭為原點
* F.next()
#傳回下一行,并将檔案操作标記位移到下一行。把一個file用于for … in file這樣的語句時,就是調用next()函數來實作周遊的。
* F.seek(offset[,whence])
# 将檔案打操作标記移到offset的位置。這個offset一般是相對于檔案的開頭來計算的,一般為正數。但如果提供了whence參數就不一定了, whence可以為0表示從頭開始計算,1表示以目前位置為原點計算。2表示以檔案末尾為原點進行計算。需要注意,如果檔案以a或a+的模式打開,每次進 行寫操作時,檔案操作标記會自動傳回到檔案末尾。
* F.truncate([size])
#把檔案裁成規定的大小,預設的是裁到目前檔案操作标記的位置。如果size比檔案的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些随機的内容加上去