Python 檔案操作

2021-10-05 02:34:11 字數 4637 閱讀 9929

os.unlink(filepath)

刪除檔案

os.remove(filepath)

同上os.rmdir(dirpath)

刪除資料夾,必須要是空資料夾才能刪除

os.removedirs(dirpath)

同上os.rename(oldpath,newpath)

重新命名檔案、資料夾。要求2個路徑只有檔名部分不同,其餘要相同。若目標已存在,會報錯。

os.renames(oldpath,newpath)

同上os.mkdir(dirpath)

建立資料夾。如果資料夾已存在,會報錯;如果前面的路徑不存在,會報錯。

os.makedirs(dirpath)

遞迴建立資料夾。如果前面的路徑不存在,會自動建立。

os.listdir(dirpath)

列出該資料夾下的所有子資料夾,以列表形式返回。只列出子資料夾,不會列出檔案、後代資料夾。可用於遍歷。

os.chdir(dirpath)

切換到指定目錄

os.getcwd()

獲取當前目錄(注意是目錄)的絕對路徑。

如果之前用chdir()切換了路徑,此函式得到的是目標路徑。

os.path.getsize(filepath)          

返回檔案大小(位元組數)

os.path.exists(path)

檢測檔案|資料夾是否存在,返回bool值。

這2個方法是path子模組的方法。

沒有新建檔案的方法,但可以通過開啟檔案來新建檔案:開啟檔案時指定開啟模式是  檔案不存在時自動建立的模式,這樣就能新建檔案了。

path均為路徑,字串形式。

os.open(filepath,mode)              

開啟檔案,返回檔案描述符(常用fd表示)。常用的mode:

os.fdopen(fd,[,mode[,bufsize]]);

此方法是內建函式open() 的別名。

mode -- 可選,和 python 內建的 open()函式的mode引數一樣,可以是r,w,a,r+,w+,a+...

bufsize-- 可選,指定返回的檔案物件是否帶緩衝:bufsize=0,表示沒有帶緩衝;bufsize=1,表示該檔案物件是行緩衝的;bufsize=正數,表示使用乙個指定大小的緩衝衝,單位為byte,但是這個大小不是精確的;bufsize=負數,表示使用乙個系統預設大小的緩衝,預設時使用系統預設大小的緩衝。

os.read(fd,n)

fd:檔案描述符,n:最多讀取的位元組數

返回讀取到的字串

os.write(fd,bytes)

寫入乙個字串。返回實際寫入字串的長度。

要以位元組、位元組陣列的形式寫入。

示例:bytes("ok","utf-8")   將字串轉換為位元組

os.lseek(fd,pos,how)

設定檔案指標的當前位置。

第三個引數是參考點,seek_set 或 0 表示檔案頭; seek_cur或 1 表示當前位置; os.seek_end或2表示檔案尾。

第二個引數制定相對參考點的偏移量

os.close(fd)

關閉檔案

import

osfd=os.open("

1.txt

",os.o_rdwr)

os.write(fd,bytes(

"hello

\nworld

","utf-8"))

os.close(fd)

import

osfd=os.open("

1.txt

",os.o_rdwr)

bytes=os.read(fd,1024) #

返回的是位元組形式

print(bytes.decode("

utf-8

")) #

解碼,將讀取到的位元組轉換為字串

os.close(fd)

f=open(file[, mode])

mode常用的值:

模式        描述r

唯讀。預設mode時預設為r。以r開頭的:指標放在檔案頭,若檔案不存在,會報錯。

rb唯讀,開啟二進位制檔案。

r+讀寫

rb+讀寫,開啟二進位制檔案

w只寫。以w開頭的:指標放在檔案頭,如果檔案不存在,會自動建立。

wb只寫,開啟二進位制檔案

w+讀寫

wb+讀寫,開啟二進位制檔案

a追加。以a開頭的:指標放在檔案尾,如果檔案不存在,會自動建立。

ab追加,開啟二進位制檔案

a+追加,可讀寫。

ab+追加,可讀寫,開啟二進位制檔案

寫不是先清空原有內容,再寫入,而是直接覆蓋。

比如原來的內容是「hello wolrd」,寫入乙個「ok」,變為「okllo world」。

寫入的內容比原來的長,才會覆蓋完。

使用open()開啟檔案後,會返回乙個file物件,表示檔案本身。 file 物件常用的方法:

函式      

描述file.flush()

把內部緩衝區的資料立刻寫入檔案

file.close()

關閉檔案

file.read([size])

讀取指定的位元組數,預設size或size為負數時,會讀取所有內容。

如果是文字檔案,返回讀取的字串(如果讀取到的是空串,說明已到檔案尾);如果是二進位制檔案,返回讀取到的位元組。

file.readline()

讀取一行,以字串(如果讀取到的是空串,說明已到檔案尾)或位元組形式返回。

file.readlines()

讀取所有行,以字串列表或位元組列表形式返回。

file.write(str)

寫入乙個字串,返回實際寫入的字元數(注意是字元數)

file.writelines(list|tuple)        

寫入乙個字串列表|元組,元素必須是字串。

寫完乙個元素後,會在後面接著寫,不會自動換行。如果要換行,需要自己加"\n"

file.tell()

返回檔案指標的當前位置(從檔案頭開始的位元組數)

file.seek(offset[, whence])    

設定檔案指標的當前位置。

offset表示偏移量,int型,預設以字元為單位。

0   檔案頭

1   當前位置(預設)

2    檔案尾

讀|寫的時候,檔案指標會自動後移。

如果以文字檔案的方式開啟(不帶b),則讀取時返回字串|字串列表,寫入時只能寫入字串。

如果以二進位制的形式開啟(帶b),則讀取時返回位元組,寫入時可以寫入任何型別(底層都是位元組)。

f=open("

1.txt

","r+")

#str=f.read(1024) #讀指定的位元組數

#str=f.readline() #讀一行

str=f.readlines() #

全讀完,作為列表返回,一行乙個元素

print

(str)

f.close()

f=open("

1.txt

","r+")

f.write(

"hello

") #

從頭開始覆蓋(不是先清空原有內容,再寫入,是直接從頭開始寫,可能覆蓋不完)

f.close()

pickle模組可以實現資料的序列化和反序列化。

pickle.dump(物件|變數|值, 檔案物件)

import

pickle

file=open("

1.txt

","wb")

str="

hello

"list=[1,2,3]

pickle.dump("ok

",file)

pickle.dump(str,file) #可同時序列化多個資料

pickle.dump(1,file) #

需要以二進位制形式開啟檔案。以文字檔案形式開啟,只能寫入字串型別,不能寫入其他型別。

pickle.dump(list,file)

file.close()

x = pickle.load(檔案物件)

import

pickle

file=open("

1.txt

","rb

") #

如果只有字串,可以以文字檔案形式開啟;如果有其他型別的,就必須以二進位制形式開啟,否則反序列化會出錯

a=pickle.load(file)

b=pickle.load(file)

c=pickle.load(file)

d=pickle.load(file)

print(a,b,c,d) #

ok hello 1 [1, 2, 3] 反序列化的順序和序列化的順序一致

file.close()

python 檔案操作

簡明 python 教程 中的例子,python 執行出錯,用open代替file 可以執行。poem programming is fun when the work is done if you wanna make your work also fun use python f open e ...

python檔案操作

1,將乙個路徑名分解為目錄名和檔名兩部分 a,b os.path.split c 123 456 test.txt print a print b 顯示 c 123 456 test.txt 2,分解檔名的副檔名 a,b os.path.splitext c 123 456 test.txt pri...

Python 檔案操作

1.開啟檔案 如下 f open d test.txt w 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只寫 如果檔案 不存在,則自動建立檔案 a 附加到檔案末尾 r 讀寫 如果需要以二進位制方式開啟檔案,需要在mode後面加上...