1. 程式人生 > >py 的 第 8 天

py 的 第 8 天

副本 lose lin 追加 line 相對路徑 註意 指定 變量名

文件操作

本節主要內容

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 天