標籤:imp 移動檔案 move 控制代碼 檔案的 讀寫 lin 字元 cat
檔案基本操作:
m = open(‘words‘,encoding=‘utf-8‘)#開啟檔案(python預設字元集為utf-8,windows為gbk),不輸入模式預設為r模式
print(m.read()) #讀檔案
print(m.readline()) #讀取第一行
print(m.readlines()) #把檔案的每一行放到一個list裡面
開啟檔案的模式:
r,唯讀模式(預設)【不可寫;檔案不存在,會報錯】
w,唯寫模式【不可讀;不存在則建立;存在則刪除內容;】
a,追加模式【不可讀; 不存在則建立;存在則只追加內容;】
r+,讀寫入模式【可讀、可寫;可追加,如果開啟的檔案不存在的話,會報錯】
w+,寫讀模式【使用w+的話,已經存在的檔案內容會被清空,可以讀到已經寫的檔案內容】
a+,追加讀寫入模式【不存在則建立;存在則只追加內容;】
檔案操作方法:
f = open(‘file.txt‘,‘r+‘,encoding=‘utf-8‘) # encoding參數可以指定檔案的編碼
f.readline() # 讀一行
f.readable() # 判斷檔案是否可讀
f.writable() # 判斷檔案是否可寫
f.encoding # 列印檔案的編碼
f.read() # 讀取所有內容,大檔案時不要用,因為會把檔案內容都讀到記憶體中,記憶體不夠的話,會把記憶體撐爆
f.readlines() # 讀取所有檔案內容,返回一個list,元素是每行的資料,大檔案時不要用,原因和上面一樣
f.tell() # 擷取當前檔案的指標指向
f.seek(0) # 把當前檔案指標指向哪
f.write(‘愛情認證‘) # 寫入內容
f.fulsh() # 寫入檔案後,立即從記憶體中把資料寫到磁碟中
f.truncate() # 清空檔案內容
f.writelines([‘愛情認證‘ ,‘孫燕姿‘]) # 將一個列表寫入檔案中
f.close() #關閉檔案
大檔案讀取高效操作方法:
用上面的read()和readlines()方法操作檔案的話,會先把檔案所有內容讀到記憶體中,這樣的話,記憶體資料一多,非常卡,高效的操作,就是讀一行操作一行,讀過的內容就從記憶體中釋放了,如下:
f = open(‘file.txt‘)
for line in f:
print(line)
# 這樣的話,line就是每行檔案的內容,讀完一行的話,就會釋放一行的記憶體
檔案指標:
# 用來記錄檔案讀到哪裡
m = open(‘name‘,‘a+‘,encoding=‘utf-8‘)# a模式的檔案指標是在末尾的
m.write(‘呃呃呃‘)
m.seek(0) #移動檔案指標到最前面
print(m.read())
m.write(‘呵呵呵‘) #移動完檔案指標之後,從前面開始讀,但寫的時候還是在檔案末尾寫
m.seek(0)
print(m.read())
自動關檔案:
在操作檔案的時候,經常會忘了關閉檔案。可以使用with,它會在使用完這個檔案控制代碼之後,自動關閉該檔案,使用方式如下:
with open(‘file.txt‘, ‘r‘) as f:# 開啟一個檔案,把這個檔案的控制代碼付給f
for line in f:
print(line)
with open(‘file.txt‘) as fr,open(‘file_bak‘, ‘w‘) as fw:# 這個是多檔案的操作,開啟兩個檔案,fr是讀file.txt,fw是建立一個file_bak檔案
for line in fr:# 迴圈file.txt中的每一行
fw.write(line)# 寫到file_bak檔案中
修改檔案:
修改檔案有兩種方式:
1、一種是把檔案的全部內容都讀到記憶體中,然後把原有的檔案內容清空,重新寫新的內容。
2、第二種是把修改後的檔案內容寫到一個新的檔案中。
第一種方式:
with open(‘file.txt‘,‘r+‘) as fr:
res = fr.read()
new_res = res.replace(‘我‘ ,‘me‘)
fr.truncate()
fr.write(new_res)
第二種方式:
# 這個是多檔案的操作,開啟兩個檔案,fr是讀file.txt,fw是建立一個file_bak檔案
import os
with open(‘file‘) as fr,open(‘new_file‘,‘w‘) as fw:
for line in fr: # 迴圈file.txt中的每一行
new_line = line.replace(‘花‘,‘flower‘)
fw.write(new_line) # 寫到file_bak檔案中
os.remove(‘file‘) # 刪除檔案
os.rename(‘new_file‘,‘file‘) # 改名
f.write()和f.writelines
# f.write()只能寫字串
a = [‘abc\n‘,‘123\n‘,‘[email protected]#‘]
f = open(‘name‘,‘w‘)
for i in a:
f.write(i)
# f.writelines()會迴圈把list當中的元素寫入檔案
a = [‘abc\n‘,‘123\n‘,‘[email protected]#‘]
f = open(‘name‘,‘w‘)
f.writelines(a)
Python學習之==>檔案操作