標籤:off 處理 定位 position from 寫檔案 格式 刪除 getcwd
1. 檔案的開啟與關閉<1>開啟檔案
在python,使用open函數,可以開啟一個已經存在的檔案,或者建立一個新檔案
open(檔案名稱,訪問模式)
樣本如下:
f = open(‘test.txt‘, ‘w‘)
說明:
| 訪問模式 |
說明 |
| r |
以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 |
| w |
開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。 |
| a |
開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
| rb |
以二進位格式開啟一個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。 |
| wb |
以二進位格式開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。 |
| ab |
以二進位格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。 |
| r+ |
開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
| w+ |
開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。 |
| a+ |
開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。 |
| rb+ |
以二進位格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。 |
| wb+ |
以二進位格式開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。 |
| ab+ |
以二進位格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。 |
<2>關閉檔案
close( )
樣本如下:
# 建立一個檔案,檔案名稱為:test.txtf = open(‘test.txt‘, ‘w‘)# 關閉這個檔案f.close()
2. 檔案的讀寫<1>寫資料(write)
使用write()可以完成向檔案寫入資料
demo:
f = open(‘test.txt‘, ‘w‘)f.write(‘hello world, i am here!‘)f.close()
運行現象:
<2>讀資料(read)
使用read(num)可以從檔案中讀取資料,num表示要從檔案中讀取的資料的長度(單位是位元組),如果沒有傳入num,那麼就表示讀取檔案中所有的資料
demo:
f = open(‘test.txt‘, ‘r‘)content = f.read(5)print(content)print("-"*30)content = f.read()print(content)f.close()
運行現象:
<3>讀資料(readlines)
就像read沒有參數時一樣,readlines可以按照行的方式把整個檔案中的內容進行一次性讀取,並且返回的是一個列表,其中每一行的資料為一個元素。
#coding=utf-8f = open(‘test.txt‘, ‘r‘)content = f.readlines()print(type(content))i=1for temp in content: print("%d:%s"%(i, temp)) i+=1f.close()
運行現象:
<4>讀資料(readline)
#coding=utf-8f = open(‘test.txt‘, ‘r‘)content = f.readline()print("1:%s"%content)content = f.readline()print("2:%s"%content)f.close()
運行現象:
3. 檔案複製
#coding=utf-8oldFileName = raw_input("請輸入要拷貝的檔案名稱字:")oldFile = open(oldFileName,‘rb‘)# 如果開啟檔案if oldFile: # 提取檔案的尾碼 fileFlagNum = oldFileName.rfind(‘.‘) if fileFlagNum > 0: fileFlag = oldFileName[fileFlagNum:] # 組織新的檔案名稱字 newFileName = oldFileName[:fileFlagNum] + ‘[複件]‘ + fileFlag # 建立新檔案 newFile = open(newFileName, ‘wb‘) # 把舊檔案中的資料,一行一行的進行複製到新檔案中 for lineContent in oldFile.readlines(): newFile.write(lineContent) # 關閉檔案 oldFile.close() newFile.close()4. 檔案的隨機讀寫<1>擷取當前讀寫的位置
在讀寫檔案的過程中,如果想知道當前的位置,可以使用tell()來擷取。
# 開啟一個已經存在的檔案f = open("test.txt", "r")str = f.read(3)print "讀取的資料是 : ", str# 尋找當前位置position = f.tell()print "當前檔案位置 : ", positionstr = f.read(3)print "讀取的資料是 : ", str# 尋找當前位置position = f.tell()print "當前檔案位置 : ", positionf.close()<2>定位到某個位置
如果在讀寫檔案的過程中,需要從另外一個位置進行操作的話,可以使用seek()
seek(offset, from)有2個參數
- offset:位移量
- from:方向
- 0:表示檔案開頭
- 1:表示當前位置
- 2:表示檔案末尾
demo:把位置設定為:從檔案開頭,位移5個位元組。
# 開啟一個已經存在的檔案f = open("test.txt", "r")str = f.read(30)print "讀取的資料是 : ", str# 尋找當前位置position = f.tell()print "當前檔案位置 : ", position# 重新設定位置f.seek(5,0)# 尋找當前位置position = f.tell()print "當前檔案位置 : ", positionf.close()
demo:把位置設定為:離檔案末尾,3位元組處
# 開啟一個已經存在的檔案f = open("test.txt", "r")# 尋找當前位置position = f.tell()print "當前檔案位置 : ", position# 重新設定位置f.seek(-3,2)# 讀取到的資料為:檔案最後3個位元組資料str = f.read()print "讀取的資料是 : ", strf.close()
5. 檔案的重新命名、刪除
有些時候,需要對檔案進行重新命名、刪除等一些操作,python的os模組中都有這麼功能
<1>檔案重新命名
os模組中的rename()可以完成對檔案的重新命名操作
rename(需要修改的檔案名稱, 新的檔案名稱)
import osos.rename("畢業論文.txt", "畢業論文-最終版.txt")<2>刪除檔案
os模組中的remove()可以完成對檔案的刪除操作
remove(待刪除的檔案名稱)
import osos.remove("畢業論文.txt")6. 檔案夾的相關操作
實際開發中,有時需要用程式的方式對檔案夾進行一定的操作,比如建立、刪除等。
就像對檔案操作需要os模組一樣,如果要操作檔案夾,同樣需要os模組。
<1>建立檔案夾
import osos.mkdir("張三")
<2>擷取目前的目錄
import osos.getcwd()
<3>改變預設目錄
import osos.chdir("../")
<4>擷取目錄列表
import osos.listdir("./")
<5>刪除檔案夾
import osos.rmdir("張三")7. 批量修改檔案名稱
#coding=utf-8#批量在檔案名稱前加首碼import osfunFlag = 1 # 1表示添加標誌 2表示刪除標誌folderName = ‘./renameDir/‘# 擷取指定路徑的所有檔案名稱字dirList = os.listdir(folderName)# 遍曆輸出所有檔案名稱字for name in dirList: print name if funFlag == 1: newName = ‘[修改]-‘ + name elif funFlag == 2: num = len(‘[修改]-‘) newName = name[num:] print newName os.rename(folderName+name, folderName+newName)
Python檔案處理小結