py 的 第 8 天
文件操作
本節主要內容
1初識文件操作
2只讀 r,rb 只寫w,wb追加a,ab r+讀寫,w+寫讀,a+寫讀(追加寫讀)
3其他的操作方法
4文件的修改以及另一種打開文件句柄的方式
主要內容
一初識文件操作
使用py來讀寫文件是很簡單的操作,我們使用open()函數來打開一個文件,獲取到文件的句柄,然後通過文件句柄就可以進行各種各樣的操作了,根據打開方式的不同能夠執行的操作也會有相應的差異 打開文件方式r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b默認使用的是r(只讀)模式
二只讀操作(r,rb)
變量名=open(‘文件夾名’,mode=‘r‘,encoding=’utf-8‘這個碼看情況,一般pycharm也就這樣了
新變量名=變量名。read() 這是讀就用read 這兩個單詞還是認識的,寫是。。。。
print(新變量名)
變量名。close() 這就是關閉上面的變量
註意encodin表示編碼集,根據文件實際弄,只是我們更多的用utf-8
rb讀取出來的數據事bytes類型,在rb模式下,不能選擇encoding字符集
變量名=open(‘文件名’,mode=‘rb’)
新變量名=f。read()
print(新變量名)
f。closr
結果就是一堆字節
rb的作用:讀取非文本文件的時候,比如讀取mp3.圖像。視頻等信息的時候用
絕對路徑和相對路徑
1絕對路徑:從磁盤的根目錄開始一直到文件名。
2相對路徑:同一文件夾下的文件。相對於當前這個程序所在的文件夾而言。如果在同一個文件夾中,則相對路徑就是這個文件名,如果在上一層文件夾。則要。。。/
推薦大家使用相對路徑,這樣吧程序拷貝給別人的時候,直接把羨慕拷貝走就能運行,如果要絕對路徑,就要拷貝外部文件了。
1.read()將文件中的內容全部讀取出來,弊端:占內存,如果文件過大,容易導致內存崩潰。
2.read(n)這個N寫的是幾就讀前幾個字,再讀是從n後面開始讀,不是從頭開始,rb就是讀n個字節
3readline()一次讀取一行數據,註意:readline()結尾,註意每次讀取出來的數據都會有一個\n
所以呢,需要我們使用 strip()方法來去掉\n或者空格
4.readlines()將每一行形成一個元素,放到一個列表中,將所有的內容都讀取出來,所以也是容易內存崩
5.循環讀取 這種方式是最好的,每次讀取一行內容,不會產生內存溢出的問題。
變量=open(‘文件名’,mode=‘r‘,encoding=’utf-8‘)
for i(可自定名) in 變量:
i 循環
讀取完文件句柄一定要關閉
三 寫模式(w,wb)
寫的時候註意,如果沒有文件,則會創建文件,如果文件存在則把原文件內容刪除,再寫入新內容
變量=open(‘文件名’,mode=‘w‘,encoding=’utf-8‘)
變量。write(’想寫的‘)
變量。flush() 養成刷新的好習慣
變量。close 關閉也是好習慣
wb模式下。可以不指定打開文件的編碼,但在寫文件的時候必須將字符串轉化成utf-8的bytes數據
變量=open(‘文件名“,mode=”wb“)
變量。write(’想寫的”,encoding=“utf-8‘)
刷新 關閉 不推薦這樣反正也要寫,還是從頭就開始
四增加(a,ab)
我們寫入的文件會在追加在文件的結尾
變量=open(‘文件名’,mode=‘a’,‘utf-8’)
變量。write(“”)
刷新 關閉
五 讀寫模式 r+ r+b
對於讀寫模式,必須是先讀,因為默認光標是在開頭的,準備讀取的,在讀取完了之後再進行寫入,我們以後使用頻率最高的就是r+
變量=(‘文件名’,mode=r+,‘utf-8’)
新變量=變量。read()
變量。write (‘想寫的’)
print(新變量) r+模式一定要先讀取再寫入 這個不管你讀幾個,寫的話永遠在最後寫,就算修改光標
媽的 r+先寫後讀也行,就是你寫幾個光標向後移幾個,讀的時候按光標走,就算是字符串類型的數字‘1’ utf-8的編碼 字節和漢字也不一樣,要註意
六 寫讀(w+,w+b)
先將所有內容都清空,然後寫入最後讀取,但是讀取的內容是空,一般不常用,調節光標可以選擇讀入,挑光標也沒用
七,追加讀(a+)
a+模式下無論先讀還是後讀都是讀取不到數據的
還有就是把字符換成字節而已,不贅述了
八,其他相關操作
seek 光標操作 變量。seek(n) 才可以 n代表的是位置 用的是byte 所以使用utf-8的中要是3的倍數
seek(0)移動到開頭,seek(0,2)移動到結尾 也可以直接加數字移動的是字節
tell() 變量。tell() 查詢光標的位置 這個感覺實在沒用
truncate(n) 這個操作比較多,再組合組合前面的給的操作,讀取,光標位置什麽的
這個n是數字,不管怎麽切,都是從頭切,這個n和光標一樣都是移動的字節。
想要再讀取截斷後的段落,移動光標為0,否則一直讀取原文件,原文件讀取完畢也不讀取新文件
截斷會截到目標位置或光標位置
九修改文件
只能將文件中的內容讀取到內存中,將信息修改完畢,將原文件刪除,把新文件的名改成老文件
import os
with open(‘文件名’,mode=‘r‘,encoding=‘utf-8’)as f1\
open(‘文件名2’,mode=‘w‘,encoding=‘utf-8’)as f2:
變量名=f.read()
新變量名=變量。replace(‘ ’, “”)
f2。write(新變量名)
os。remove(‘文件名’)
os。rename(‘新變量名‘,一般就是老名——副本,‘文件名’)把新名字改回去
這樣最大的問題就是一次寫太多,內存容易爆炸 用循環一句一句的就沒事了 import os with open(‘文件名’,mode=‘r‘,encoding=’utf-8‘)as f1,\ open9(’文件名2‘,mode=’w‘,encoding=‘utf-8’)as f2: for i in f1 變量=i。replace(‘ ’,‘ ’) f2.write(變量) os。remove(‘文件名’) os。rename(‘文件名2’,”文件名“)
py 的 第 8 天