每門語言都會涉及到文件操作,本次就學習一下python中與文件操作相關的知識。
一、文件操作
1、創建空文件
os.mknod("newfile.txt")
2、打開文件操作
fp=open("newfile.txt",“w”) 打開文件寫,不存在則創建,打開文件的模式主要有如下方式
w | 以寫方式打開 |
a | 以追加模式打開(從EOF開始,必要時創建新文件) |
r+ | 以讀寫模式打開 |
w+ | 以讀寫模式打開(參見w) |
a+ | 以讀寫模式打開(參見a) |
rb | 以二進制讀模式打開 |
wb | 以二進制寫模式打開 |
ab | 以二進制追加模式打開 |
rb+ | 以二進制讀寫模式打開 |
wb+ | 以二進制讀寫模式打開 |
ab+ | 以二進制讀寫模式打開 |
讀寫過程中常用的一些函數見下表:
fp.read(size) | size爲讀取的長度,以byte爲單位 |
fp.readline(size) | 讀一行,如果定義了size,有可能返回的只是一行的一部分 |
fp.readlines(size) | 吧文件每一行作爲一個list的一個成員,並返回這個list。 size爲讀取的總長度,當讀取的長度夠size後,就不會讀取行數了。 |
fp.write(str) | 把str寫到文件中,write()不會在str後加上一個換行符 |
fp.writelines(seq) | 把seq的內容全部寫到文件中(多行一次性寫入)。 |
fp.close() | 關閉文件。 |
fp.flush() | 把緩衝區的內容寫入磁盤 |
fp.fileno() | 返回一個長整型的文件標籤 |
fp.isatty() | 文件是否是一個終端設備文件(unix linux) |
fp.tell() | 返回文件操作標記的當前位置,以文件的開頭爲起點 |
fp.next() | 返回下一行,並將文件操作標記位移到下一行。 把一個file用於for ... in file這樣的語句時,使用此函數來實現遍歷。 |
fp.seek(offset,whence) | 將文件操作標記移到offset的位置。offset一般是相對於文件的開頭來計算的, 一般爲整數,但如果提供了whence參數就不一定了,whence可以爲0表示從頭開始 計算,1表示當前位置爲起點計算,2表示以文件末尾爲起點進行計算。 需要注意:如果文件以a或a+的模式打開,每次進行寫操作時,文件操作標記會自動返回 到文件末尾。 |
fp.tuncate(size) | 把文件裁定規定的大小,默認的是裁到當前文件操作標記的位置。如果size比文件的大小 還要打,依據系統的不同可能是不改變文件,也可能是用0把文件補到相應的大小,也可 能是以一些隨機的內容加上去。 |
看完上述的函數,發現基本上和c語言中讀寫文件類似,也是很容易掌握的,其實他的二進制讀寫處理能力不好,沒有c語言那麼瀟灑的操作。。
二、目錄與文件操作
目錄操作的一些函數見下表,注意使用了os和shutil模塊(shell工具模塊)
創建目錄 | os.mkdir("dirname") |
複製文件 | shutil.copyfile("oldfile","newfile"),oldfile和newfile都只能是文件 |
複製文件夾 | shutil.copytree("olddir","newdir")olddir和newdir只能是目錄,且newdir必須不存在 |
重命名文件目錄 | os.rename("oldname","newname") |
移動文件目錄 | shutil.move("oldpos","newPos") |
刪除文件 | os.remove("file") |
刪除目錄 | os.rmdir("dir")只能刪除空目錄 |
刪除目錄 | shutil.rmtree("dir")空目錄,有內容的目錄都可以刪除 |
轉換目錄 | os.chdir("path")換路徑 |
複製文件 | shutil.copy("oldfile","newfile") oldfile只能是文件夾,newfile可以是文件或文件夾 |
需要記住幾個簡單的區別,copy和copfile在複製文件的區別,刪除目錄的區別等。這些操作也不需要記住太多,更多的和Linux下的命令對應,只需要記住os和shutil的模塊就可以了。