能夠用 file 對象作大部分的文件操做。 python
先用open()函數打開一個文件,建立一個file對象,再用相關的方法才能夠調用它進行讀寫。
open() 和 file() 功能相同, 能夠任意替換。
任何使用 open() 的地方, 均可以使用 file() 替換它,建議用open()linux
語法: 程序員
file object = open(file_name [, access_mode][, buffering])
參數說明: 緩存
file_name: file_name變量是一個包含了你要訪問的文件名稱的字符串值。 access_mode: 決定打開文件的模式:只讀,寫入,追加等,全部可取值見後面的徹底列表,這個參數是非強制的 默認文件訪問模式爲只讀(r).一般, 文件使用模式 'r', 'w', 或是 'a'模式來打開, 分別表明讀取, 寫入 和追加 buffering: 若是buffering的值被設爲0,就不會有寄存。 若是buffering的值取1,訪問文件時會寄存行。 若是將buffering的值設爲大於1的整數,代表這就是的寄存區的緩衝大小。 若是取負值,寄存區的緩衝大小則爲系統默認。 例1. >>> f = open('c.txt','w',0) #沒有緩衝 >>> f.write('hello world') #close以前打開另外一終端觀察文件發現已經寫入進 去,說明關閉文件以前就已經寫到硬盤 >>> f.close() 例2. >>> f = open('d.txt','w',1) #有緩衝 >>> f.write('hello world') #close以前打開另外一終端觀察文件發現沒有寫入進 去,說明關閉文件以前沒有寫到硬盤 >>> f.close() 例3. >>> f = open('e.txt','w',5) #設置緩衝區大小,wing發現沒有管用,跟沒有緩衝 效果是同樣的 >>> f.write('hello world') 例4. >>> f = open('f.txt','w',-1) #設置緩存區大小爲默認,發現有緩衝 >>> f.write('hello world') >>> f.close() 通常狀況下緩衝使用系統默認方式便可.
不一樣模式打開文件的徹底列表: ide
| 模式 | 描述 | | r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。以這種模式打開的文件必須是已經存在的(U模式也是) | | rb | 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。 | | r+ | 打開一個文件用於讀寫。文件指針將會放在文件的開頭。注意這個模式默認是帶緩衝的 | | rb+ | 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。 | | w | 打開一個文件只用於寫入。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。 | | wb | 以二進制格式打開一個文件只用於寫入。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。 | | w+ | 打開一個文件用於讀寫。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。 | | wb+ | 以二進制格式打開一個文件用於讀寫。若是該文件已存在則將其覆蓋。若是該文件不存在,建立新文件。 | | a | 打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後即便你 seek 到了其它的地方。若是該文件不存在,建立新文件進行寫入。 | | ab | 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後。若是該文件不存在,建立新文件進行寫入。 | | a+ | 打開一個文件用於讀寫。若是該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。若是該文件不存在,建立新文件用於讀寫。 | | ab+ | 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。若是該文件不存在,建立新文件用於讀寫。 |
通用換行符支持(UNS):函數
還有一個特殊的模式U,不一樣平臺用來表示行結束的符號是不一樣的, 例如 \n, \r, 或者 \r\n.當你使用 'U' 標誌打開文件的時候, 全部的行分割符(或行結束符, 不管它原來是什麼)經過 Python 的輸入方法(例如 read*() )返回時都會被替換爲換行符 NEWLINE(\n).注意 UNS 只用於讀取文本文件. 沒有對應的處理文件輸出的方法. 可使用U,rU或Ua模式打開文件
關於 'b' 的說明:spa
對於全部 POSIX 兼容的 Unix 系統(包括Linux)來講, 'b'是可由可無的, 由於它們把全部的文件看成二進制文件, 包括文本文件. 下面是從 Linux 手冊的 fopen() 函數使用中摘錄的一段, Python 語言中的 open() 函數就是從它衍生出的: 指示文件打開模式的字符串中也能夠包含字符 "b" , 但它不能作爲第一個字符出現. 這樣作的目的是爲了嚴格地知足 ANSI C3.159-1989 (即 ANSI C)中的規定。 事實上它沒有任何效果, 全部POSIX 兼容系統, 包括 Linux , 都會忽略 "b" ,其它系統可能會區分文本文件和二進制文件, 若是你要處理一個二進制文件, 並但願你的程序能夠移植到其它非 Unix 的環境中, 加上"b" 會是不錯的主意
一個文件被打開後,你就會擁有一個file對象,你能夠獲得有關該文件的各類信息。 指針
file對象屬性列表: code
| 屬性 | 描述 | | file.closed | 返回true若是文件已被關閉,不然返回false。 | | file.mode | 返回被打開文件的訪問模式。 | | file.name | 返回文件的名稱。 | | file.softspace | 若是用print輸出後,必須跟一個空格符,則返回false。不然返回true。通常程序員用不着,由程序內部使用。 |
例: 對象
#!/usr/bin/python #打開一個文件 fo = open("foo.txt", "w") print "文件名: ", fo.name print "是否已關閉 : ", fo.closed print "訪問模式 : ", fo.mode print "末尾是否強制加空格 : ", fo.softspace 輸出結果: 文件名: foo.txt 是否已關閉 : False 訪問模式 : w 末尾是否強制加空格 : 0
close()方法:
File 對象的 close()方法刷新緩衝區裏任何還沒寫入的信息,並關閉該文件,這以後便不能再進行寫入。 當一個文件對象的引用被從新指定給另外一個文件時,Python 會關閉以前的文件 語法: fileObject.close() 例: #!/usr/bin/python fo = open("foo.txt", "w") print "文件名: ", fo.name fo.close() # 關閉打開的文件 輸出結果: 文件名: foo.txt
從一個打開的文件中讀取一個字符串。 fileObject.read([count]) 被傳遞的參數count是要從已打開文件中讀取的字節計數。 該方法從文件的開頭開始讀入,若是沒有傳入count參數(默認值爲 -1)或者值爲負, 文件將被 讀取到末尾. #!/usr/bin/python fo = open("foo.txt", "r+") str = fo.read(10); print "讀取的字符串是 : ", str fo.close() 輸出結果: 讀取的字符串是 : www.fklinu
讀取下個行結束符以前的全部字節. 做爲字符串返回整行,包括行結束符。 和 read() 相同, 它也有一個可選的 size 參數, 默認爲 -1, 表明讀至行結束符, 若是 提供了該參數, 那麼在超過 size 個字節後會返回不完整的行.
讀取全部剩餘的行,返回一個字符串列表。
可將任何字符串(包括二進制數據)寫入一個打開的文件,不會在字符串的結尾添加換行符('\n')
是針對列表的操做, 它接受一個字符串序列(字符串,字符串列表,字符串元組)做爲參數, 將它們寫入文件. 行結束符並不會被自動加入, 因此若是須要的話, 你必須在調用writelines()前給每行結尾加上行結束符.
語法:
fileObject.write(string)
string參數是要寫入到已打開文件的內容。
#!/usr/bin/python fo = open("foo.txt", "w") fo.write( "www.fklinux.com!\nVery good site!\n"); fo.close() # 關閉打開的文件 被建立的foo.txt文件內容: # cat foo.txt www.fklinux.com! Very good site!
這個方法告訴咱們文件內的當前位置,換句話說,下一次的讀寫會發生在文件開頭這麼多字節之 後。
能夠在文件中移動文件指針到不一樣的位置. 語法: seek(offset [,from]) offset變量表示要移動的字節數 from變量指定開始移動字節的參考位置。 若是from被設爲0,這意味着將文件的開頭做爲移動字節的參考位置 若是設爲1,則使用當前的位置做爲參考位置 若是設爲2,那麼該文件的末尾將做爲參考位置 seek配置r+模式能夠實現從指定位置修改文件
例:
就用上面建立的文件foo.txt。
#!/usr/bin/python
fo = open("foo.txt", "r+")
str = fo.read(10);
print "讀取的字符串是 : ", str
# 查找當前位置 position = fo.tell(); print "當前文件位置 : ", position # 把指針再次從新定位到文件開頭 position = fo.seek(0, 0); str = fo.read(10); print "從新讀取字符串 : ", str # 關閉打開的文件 fo.close() 輸出結果: 讀取的字符串是 : www.fklinu 當前文件位置 : 10 從新讀取字符串 : www.fklinu
文件迭代:
一行一行訪問文件很簡單:
for eachLine in f:
:
此循環裏, eachLine 表明文本文件的一行(包括末尾的行結束符),你可使用它作任何想作的事情. 在 Python 2.2 中, 引進了迭代器和文件迭代, 文件對象成爲了它們本身的迭代器 意味着用戶沒必要調用 read*() 方法就能夠在 for 循環中迭代文件的每一行. 另外也可以使用迭代器的 next 方法, file.next() 能夠用來讀取文件的下一行. 和其它迭代器同樣, Python 也會在全部行迭代完成後引起 StopIteration 異常. 迭代器以前的老方法: for eachLine in f.readline(): :
flush() 方法
會直接把內部緩衝區中的數據馬上寫入文件, 而不是被動地等待輸出緩衝區被寫入.
truncate() 方法
將文件截取到當前文件指針位置或者到給定 size , 以字節爲單位.
它接受一個可選的 size 做爲參數. 若是給定, 那麼文件將被截取到最多 size 字節處. 若是沒有傳遞 size 參數, 那麼默認將截取到文件的當前位置.例如, 你剛打開了一個文件, 而後當即調用 truncate() 方法, 那麼你的文件(內容)實際上被刪除,這時候你是實際上是從 0 字節開始截取的
Python的os模塊提供了幫你執行文件處理操做的方法,好比重命名和刪除文件。
rename()方法:
須要兩個參數,當前的文件名和新文件名。
語法:
os.rename(current_file_name, new_file_name)
例子: 下例將重命名一個已經存在的文件test1.txt。
#!/usr/bin/python
import os
os.rename( "test1.txt", "test2.txt" ) # 重命名文件test1.txt到test2.txt。
remove()方法:
你能夠用remove()方法刪除文件,須要提供要刪除的文件名做爲參數。
語法:
os.remove(file_name)
例子: 下例將刪除一個已經存在的文件test2.txt。
#!/usr/bin/python
import os
os.remove("test2.txt") # 刪除一個已經存在的文件test2.txt
os模塊有許多方法能幫你建立,刪除和更改目錄。
mkdir()方法:
使用os模塊的mkdir()方法在當前目錄下建立新的目錄們。你須要提供一個包含了要建立的目錄名稱的參數。
語法:
os.mkdir("newdir")
例子: 下例將在當前目錄下建立一個新目錄test。
#!/usr/bin/python
import os
os.mkdir("test") # 建立目錄test
chdir()方法:
能夠用chdir()方法來改變當前的目錄。chdir()方法須要的一個參數是你想設成當前目錄的目錄名稱。
語法:
os.chdir("newdir")
例子: 下例將進入"/home/newdir"目錄。
#!/usr/bin/python
import os
os.chdir("/home/newdir") # 將當前目錄改成"/home/newdir"
getcwd()方法:
getcwd()方法顯示當前的工做目錄。
語法:
os.getcwd()
例子: 下例給出當前目錄:
#!/usr/bin/python
import os
os.getcwd() # 給出當前的目錄
rmdir()方法 :rmdir()方法刪除目錄,目錄名稱以參數傳遞。 在刪除這個目錄以前,它的全部內容應該先被清除。 語法: os.rmdir('dirname') 例子: 如下是刪除" /tmp/test"目錄的例子,目錄的徹底合規名稱必須被給出,不然會在當前目錄下搜索該目錄。 #!/usr/bin/pythonimport osos.rmdir( "/tmp/test" ) # 刪除」/tmp/test」目錄