python中檔案的相關操作和函式

2021-10-08 03:48:14 字數 4336 閱讀 3552

fp = open(「檔名」,mode=「模式」,encoding=「utf-8」)

fp -> 檔案的io物件 (檔案控制代碼)

i => input 輸入

o => output 輸出

一.檔案的寫入

# 1.開啟檔案

fp = open("ceshi1.txt",mode="w",encoding="utf-8")

# 2.寫入內容

fp.write("把內容寫進去")

# 3.關閉檔案

fp.close()

** 二.檔案的讀取**

# 1.開啟檔案

fp = open("ceshi1.txt",mode="r",encoding="utf-8")

# 2.讀取內容

res = fp.read() # 把大象拿出來

print(res)

# 3.關閉檔案

fp.close()

** 三.位元組流的轉換**

bytes : 是用來傳輸或者儲存的資料格式

b』1234』 b"abcd" b"我愛你" -> b開頭的位元組流,範圍只能是ascii編碼

如果是中文使用encode 和 decode 來進行轉換;

將字串和位元組流(bytes流)型別進行轉換 (引數寫成轉化的字元編碼格式)

#encode() 編碼 將字串轉化為位元組流(bytes流)

#decode() 解碼 將bytes流轉化為字串

encode 編碼 => 變成二進位制位元組流

res = strvar.encode(「utf-8」)

print(res , type(res))

<*****===>

decode 解碼 =>二進位制位元組流恢復成原來的字串

res2 = res.decode(「utf-8」)

print(res2 , type(res2))

len可以計算位元組個數

num = len(res)

print(num) # 9

四.儲存二進位制位元組流

不需要指定encoding編碼集,否則報錯

五.讀取二進位制位元組流

res = fp.read()

1. 讀取原所有的內容

fp = open("集合.png",mode="rb")

res = fp.read()

fp.close()

2. 把讀取的內容儲存到另外乙個檔案

fp = open("集合2.png",mode="wb")

指定絕對路徑(完整路徑)

fp = open(r"e:\python31\day8\集合3.png",mode="wb")

fp.write(res)

fp.close()

(utf-8編碼格式下 預設乙個中文三個位元組 乙個英文或符號 占用乙個位元組)

(1)r+ 可讀可寫

fp = open("test1.txt",mode="r+",encoding="utf-8")

res = fp.read()

fp.write("789")

fp.close()

print(res)

注意點:r,r+ 模式下,

1、檔案必須存在才能建立檔案io物件(fp)

2、游標會停止在讀寫終止的位置

(2)w+ 可讀可寫

fp = open("test2.txt",mode="w+",encoding="utf-8")

fp.write("夢想起航")

fp.seek(0)

res = fp.read()

fp.close()

print(res)

注意點:w,w+ 模式下,

1、檔案不存在時可自動建立

2、游標會停止在讀寫終止的位置(同r,r+)

3、該模式下,生成檔案io物件(fp)時已預設清空檔案內容(慎用)

(3)a+ (可讀可寫)(寫入內容時強制把游標移動到最後)

fp = open("test3.txt",mode="a+",encoding="utf-8")

fp.seek(0)

fp.write("789")

fp.seek(0)

res = fp.read()

fp.close()

print(res)

注意點:a,a+ 模式下,

1、檔案不存在時可自動建立

2、寫入時游標會被強制放到檔案內容末尾(區別於r,w)(即使使用seek移動時也不行)

3、該模式下,生成檔案io物件(fp)時已預設清空檔案內容(慎用)

#read() 功能: 讀取字元的個數(裡面的引數代表字元個數)

#seek() 功能: 調整指標的位置(裡面的引數代表位元組個數)

#tell() 功能: 當前游標左側所有的位元組數(返回位元組數)

seek(0) 直接把游標移動到檔案開頭

seek(0,2) 直接把游標移動到檔案末尾

tell() 計算檔案指標左側所有的位元組數

***注意點,seek移動中文位元組的時候,有可能報錯

with open("集合.png",mode="rb") as fp:

res = fp.read()

with open(r"e:\python31\day8\集合4.png",mode="wb") as fp:

fp.write(res)

優化合併如下:

with open("集合.png",mode="rb") as fp1 ,  open(r"e:\python31\day8\集合5.png",mode="wb") as fp2:

res = fp1.read()

fp2.write(res)

重新整理緩衝區 flush

# 當檔案關閉的時候自動重新整理緩衝區

# 當整個程式執行結束的時候自動重新整理緩衝區

# 當緩衝區寫滿了 會自動重新整理緩衝區

# 手動重新整理緩衝區

fp.flush() 手動把緩衝區裡面的內容寫入檔案當中

readable() 判斷檔案物件是否可讀

writable() 判斷檔案物件是否可寫

readline() 讀取一行

『』』『引數 > 當前行字元總個數 => 以當前行讀取

引數 < 當前行字元總個數 => 以引數的大小來讀取字元的個數

預設readline 讀取一行』』』

readlines() 將檔案中的內容按照換行讀取到列表當中

lst_new = 

with open("ceshi7.txt",mode="r+",encoding="utf-8") as fp:

lst = fp.readlines()

# print(lst) # ['\t窗前明月光\n', '疑是地上霜\t\t\n', '\t\t舉頭王明月\n', '\t低頭思故鄉']

for i in lst:

print(lst_new) # ['窗前明月光', '疑是地上霜', '舉頭王明月', '低頭思故鄉']

writelines() 功能:將內容是字串的可迭代性資料寫入檔案中 引數:內容為字串型別的可迭代資料

lst = ["春眠不覺曉\n","處處蚊子咬\n","夜來大狗熊\n","乙個也跑不了\n"]

# lst = [1,2,3,4] error

with open("ceshi8.txt",mode="w",encoding="utf-8") as fp:

fp.writelines(lst)

truncate() 功能: 把要擷取的字串提取出來,然後清空內容將提取的字串重新寫入檔案中 (位元組)

with open("ceshi8.txt",mode="r+",encoding="utf-8") as fp:

fp.truncate(3)

python中檔案相關操作

有個地方需要注意,我路徑中有 t 在python中會被定義為轉義字元,在路經前加上r就會避免這種情況。rstrip避免多出現空行 優化了一下 test path r f python test.txt with open test path as test1 lines test1.readline...

Python中檔案操作和資料夾操作的學習筆記

3 檔案讀寫 4 資料夾操作 python中檔案和資料夾操作還是十分重要的 首先可以檢視一下工作目錄,檢視當前的工作目錄 print os.getcwd 如果工作目錄不正確,可以用os.chdir 函式來進行修改 os.path.dirname file os.chdir os.path.dirna...

Python 檔案操作 和 目錄操作

我們知道,檔名 目錄名和鏈結名都是用乙個字串作為其識別符號的,但是給我們乙個識別符號,我們該如何確定它所指的到底是常規檔案檔名 目錄名還是鏈結名呢?這時,我們可以使用os.path模組提供的isfile函式 isdir函式和islink函式來達成我們的目標,如下所示 print myfile,是乙個...