日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python File文件方法操作open()

系統 2502 0

Python文件操作

前言:在使用Python對文件進行操作時,需要先了解絕對路徑和相對路徑。
絕對路徑:指的是從磁盤根目錄到文件名,或者網上的一個完整的網絡地址。例:“D:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe”,https://www.baidu.com/
相對路徑:指的是以當前正在處理的文件為基本路徑進行操作。…/表示當前文件的上一層文件夾,…/…/表示當前文件的上上層文件夾。例:當前文件路徑為:D:\Program Files\Tencent\123.txt,要獲取D:\Program Files\456.txt,可以用"…/456.txt"路徑表示。
tips:建議使用相對路徑,因為在把我們的項目打包發送給別人時,別人直接就能運行。而如果使用絕對路徑,那么還要額外發送外部的文件。

一、文件操作介紹

使?Python來讀寫?件是非常簡單的操作. 我們使?open()函數來打開?個?件, 獲取到?
件句柄. 然后通過?件句柄就可以進?各種各樣的操作了. 根據打開?式的不同能夠執?的操
作也會有相應的差異.
打開?件的?式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默認使?的是r(只讀)模式

二、讀操作(r,rb)

            
              f = open(file_path, mode = "r", enoding="utf-8")
content = f.read()
f.close()
print(content)

#file_path:文件路徑,可使用絕對路徑也可使用相對路徑
#mode:指定對文件進行的操作
#encoding:解碼(讀)或者編碼(寫)的格式,一般大多數都是采用utf-8格式
#close():釋放文件句柄
#還可以這樣寫
with open(file_path, mode="r", encoding="utf-8") as f:
    content = f.read()
    print(content)

            
          
這樣寫會在執行完成之后自動釋放文件句柄,不需要自己手動釋放
            
              f = open(file_path, mode = "rb")
content = f.read()
f.close()
print(content)

            
          

#因為rb讀取出來之后的數據是bytes類型,即就是字節,所以我們在使用rb時可以不用指定encoding。
rb的作?: 在讀取非?本?件的時候,比如讀取MP3、圖像、 視頻等信息的時候就需要?到rb。 因為這種數據是沒辦法直接顯?出來的,還有,我們看的直播, 實際上都是這種數據。

讀取文件的方法

read():將文件里的內容全部讀取出來。弊端:如果文件內容數據過大,讀取時將會非常占用內存且非常緩慢,嚴重會導致內存崩潰。

            
              f = open("file/userinfo", mode="r", encoding="utf-8")
content = f.read()
f.close()
print(content)

# dogfa_111111
oldwang_123456
dajiba_dajiba
caoduanjie_111111
oldniu_1332611346

            
          

read(n):一次讀取n個字符。需要注意的是,如果你已經進行了讀取操作,那么下一次讀取將會從光標定位處繼續讀取,即上次讀取完的位置。rb讀取出來的是字節。

            
              f = open("file/userinfo", mode="r", encoding="utf-8")
content = f.read(5)
content2 = f.read(5)
f.close()
print(content)
print(content2)

#dogfa
#_1111

            
          

readline():一次讀取一行數據。需要注意的是,每次讀取出來的數據末尾都會有\n,所以我們可以使用strip()來清除\n

            
              f = open("file/userinfo", mode="r", encoding="utf-8")
content = f.readline()
content2 = f.readline()
f.close()
print(content)
print(content2)

#dogfa_111111
#oldwang_123456

            
          

readlines():讀取所有數據,將每一行數據形成一個元素放在一個列表中。弊端:和read()一樣,都是全部將數據讀取出來,容易導致內存崩潰。

            
              f = open("file/userinfo", mode="r", encoding="utf-8")
content = f.readlines()
print(content)
for line in content:
    print(line)
f.close()

#['dogfa_111111\n', 'oldwang_123456\n', 'dajiba_dajiba\n', 'caoduanjie_111111\n', 'oldniu_1332611346\n']
#dogfa_111111
#oldwang_123456
#dajiba_dajiba
#caoduanjie_111111
#oldniu_1332611346

            
          

循環讀取:for line in f: pass。優點:循環一次讀取一行,不會產生內存突然溢出崩潰這種情況。(建議使用)

            
              f = open("file/userinfo", mode="r", encoding="utf-8")
for line in f:
 print(line)
f.close()

#dogfa_111111
#oldwang_123456
#dajiba_dajiba
#caoduanjie_111111
#oldniu_1332611346

            
          

三、寫操作(w,wb)

寫的時候注意。 如果沒有?件,則會創建?件。 如果?件存在, 則將原件中原來的內容刪除, 再寫入新內容。

            
              f = open("file/dog", mode = "w", encoding="utf-8")
f.write("看我這條blog的你真帥!")
f.flush()
f.close()
f = open("file/dog", mode = "wb")
f.write("看我這條blog的你真帥!".encode("utf-8"))    

#使用wb模式寫入時,不需要指定文件的編碼格式,但是在將內容寫入時,要將內容轉換成對應格式的bytes類型
f.flush()
f.close()

            
          

四、追加操作(a,ab)

在追加模式下,我們寫入的內容會追加在?件的結尾。

            
              f = open("file/dog", mode = "a", encoding="utf-8")
f.write("你是最靚的仔")
f.flush()
f.close()
五、讀寫操作(r+,r+b)
在讀寫操作模式下,必須先進行讀操作,再進行寫操作,因為光標默認是在開頭的,讀取會默認從頭開始讀到尾,在開始寫。

            
          
正常讀寫
            
              f = open("file/dog", mode = "r+", encoding="utf-8")
content = f.read()
f.write("哈哈哈")
f.flush()
f.close()

            
          
錯誤讀寫
            
              f = open("file/dog", mode = "r+", encoding="utf-8")
f.write("哈哈哈")
content = f.read()
f.flush()
f.close()

            
          
開頭前三個字將會被“哈哈哈”替換,然后讀取的內容也是從第三個字之后開始讀取。

核能警告:在r+模式下,如果你讀取了內容,不管你讀取了多少內容,光標定位在何處,后面的寫操作都將追加在文件內容末尾。如果你沒有先進行讀取操作而是先進行了寫操作,那么寫操作會將寫入的內容替換掉開頭對應長度的內容。

六、寫讀操作(w+,w+b)
在寫讀模式下,先將內容清空,然后寫入內容。在進行讀操作時,因為在進行寫操作時光標已定位在末尾,所以讀取不到任何內容。所以寫讀模式不常使用。

            
              f = open("file/dog", mode = "w+", encoding="utf-8")
f.write("哈哈哈")
content = f.read()
f.flush()
f.close()
print(content)  # ""

            
          

#為什么不能先進行讀操作在進行寫操作?
#因為在w+模式下,先進行讀操作是讀不出來任何數據的,然后在進行寫數據,又是將內容清空寫入。所以無論是先讀后寫還是先寫后讀都是一樣的結果。

七、追加讀寫操作(a+,a+b)

在a+操作時,無論是先進行讀操作還是后進行讀操作都無法讀取到數據,因為光標始終定位在文件內容末尾處。

            
              f = open("file/dog", mode = "a+", encoding="utf-8")
f.write("寫了也讀不出來")
content = f.read()
f.flush()
f.close()
print(content)  

            
          

八、其它相關操作

seek(n, type):光標移動到n個字節位置,因為我們大部分是采用utf-8的編碼格式,所以一般n取得都是3的倍數。
seek()第一個參數指移動的字節數。
seek()第二個參數指的是從哪個位置進行偏移。取值可以是0,1,2。默認是0。
0:指相對開頭偏移
1:指相對本身位置進行偏移
2:指相對結尾偏移
開頭:seek(0)
結尾:seek(0, 2)
tell():幫助我們獲取當前光標位置,返回的值也是以字節為單位進行度量的。

truncate():截斷文件

            
              f = open("?娃娃", mode="w", encoding="utf-8")
f.write("哈哈") # 寫?兩個字符
f.seek(3) # 光標移動到3, 也就是兩個字中間
f.truncate() # 刪掉光標后?的所有內容
f.close()
做截斷操作之前,要先挪動光標,挪動到你想要截斷的位置, 然后再進?截斷。關于truncate(n), 如果給出了n, 則從開頭開頭進?截斷, 如果不給n, 則從當前位置截斷, 后?的內容將會被刪除。

            
          

九、修改文件

?件修改: 只能將?件中的內容先讀取出來, 將信息修改完畢, 然后將源?件刪除,將新?件的名字改成老?件的名字。

            
              #文件修改
import os
with open("file/dog", mode="r", encoding="utf-8") as f1, open("file/dog_new", mode="w", encoding="utf-8") as f2:
    for line in f1:
        line_new = line.replace("哈", "嘻")
        f2.write(line_new)

os.remove("file/dog")
os.rename("file/dog_new", "file/dog")

            
          

案例 bs4 爬百度貼吧圖片

            
              # 安裝的方法很簡單, cmd 執行pip install beautifulsoup4
from bs4 import BeautifulSoup
import requests
# 爬取目標網頁
html = requests.get("https://tieba.baidu.com/p/6021111523")
html = html.text
# 解析網頁
result = BeautifulSoup(html, 'html.parser')

#獲取所有的圖片img
result_imgs  =  result.find_all("img",class_= "BDE_Image")
print(result_imgs)
i = 1   #計數器
for result_img in result_imgs:
    # 獲取鏈接
    img_url=result_img['src']    # pyhon中的字典
    # 獲取文件
    result_img_content = requests.get(img_url).content
    file_name = str(i)+'.jpg'
    # 保存圖片
    with open(file_name,'wb') as wf:
        wf.write(result_img_content)
    #i+= 1  # i=i+1與i+=1意思相同
    i=i+1

            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大姚县| 合山市| 崇义县| 锡林浩特市| 分宜县| 株洲县| 新河县| 茂名市| 荆门市| 福州市| 宁晋县| 高陵县| 方城县| 克什克腾旗| 沂源县| 乐亭县| 永定县| 陆良县| 永州市| 阿图什市| 略阳县| 滨海县| 汉寿县| 博乐市| 滁州市| 沂南县| 岑溪市| 海原县| 忻州市| 集贤县| 崇仁县| 鹤壁市| 泰安市| 兰西县| 合肥市| 正定县| 顺义区| 遵义市| 翁源县| 淮滨县| 桦南县|