1. 程式人生 > 其它 >Python基礎知識4:檔案操作

Python基礎知識4:檔案操作

檔案的知識:開啟檔案、操作檔案、關閉檔案

1、關於開啟檔案:

f.open('text','r')#r代表只讀
f.open('text','w')#w代表只寫,先清空原始檔的內容
f.open('text','x')#檔案存在即報錯,檔案不存在則建立檔案,並可寫入內容(即同w)
f.open('text','a')#a代表在原始檔末尾追加內容
案例1:讀檔案內容的程式
f=open('db','r')
data=f.read()
print(data)
f.close()

案例2:encoding限制檔案內容形式

#讀檔案內容出來,如果開啟檔案時出現亂碼,需要看下encoding對應的型別是否真錯
#比如text檔案中有漢字,則必須寫上encoding='utf-8'
f=open('text','r',encoding='utf-8')
data=f.read()
print(data)
f.close()

案例3:加b後,直接以位元組方式讀取檔案,不加b則以字串形式讀取

f=open('db','rb')#當r為rb時,會以位元組方式讀取檔案
data=f.read()
print(data,type(data))
f.close()

案例4:當傳遞內容為字元時,需要通過bytes轉化

f=open('db','ab')#會以位元組方式追加
f.write(bytes("hello",encoding='utf-8'))#當傳遞內容為字元時,需要用bytes轉化
f.close()

案例5:r+即可讀又可寫,同時不會覆蓋檔案,會在末尾追加內容

f=open('db','r+',encoding='utf-8')#即可讀又可寫
data=f.read()
print(data)
f.write("hello")#在末尾覆蓋
f.close()

執行結果:

另外還有a+(實現讀和寫,但寫的時候會永遠在最後追加),w+(實現寫和讀,但會清空原始檔內容後在寫),因此用的最多的是r+

2、關於檔案的操作

seek()#將按位元組形式讀取指標位置,中文代表3個位元組
tell()#獲取當前指標的位置,按位元組形式
案例6:調整指標位置
f=open('db','r+',encoding='utf-8')#即可讀又可寫
data=f.read(1)#如果開啟模型無b,則read按字元讀取,如果有b,則按位元組方式,比如中文會佔3個位元組
print(f.tell())#tell()當前指標所在的位置,無論是否有b,均按位元組形式
f.seek(f.tell())#可調整當前指標的位置
f.write("888")
f.close()

案例7:flush#強刷,當沒有結束程式時,需要把寫的內容強制刷進記憶體

f=open('db','a')
f.write("123")
f.flush()#強制把123內容寫入硬碟中
input("hhh")

案例8:truncate,用來截斷資料

f=open('db','r+',encoding='utf-8')#即可讀又可寫
f.seek(3)#調整到3位元組
f.truncate()#3位元組後的所有內容全部清空
f.close()

其他:readline,僅讀取一行

3、關閉檔案

可以用f.close(),還可以用with執行完自動關閉

withopen('db')asf:
input("hhh")

案例9:讀取第一個檔案的前世行,並寫入到第二個檔案

withopen('db','r')asf1,open('db2','w')asf2:
times=
forlineinf1:#一行一行的讀取
times+=1
iftimes
f2.write(line)
else:
break

案例10:修改一個檔案,替換部分內容

withopen('db','r')asf1,open('db2','w')asf2:
forlineinf1:
new_str=line.replace("aaa","cc")
f2.write(new_str)