欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python File文件方法操作open()

系統(tǒng) 2313 0

Python文件操作

前言:在使用Python對(duì)文件進(jìn)行操作時(shí),需要先了解絕對(duì)路徑和相對(duì)路徑。
絕對(duì)路徑:指的是從磁盤根目錄到文件名,或者網(wǎng)上的一個(gè)完整的網(wǎng)絡(luò)地址。例:“D:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe”,https://www.baidu.com/
相對(duì)路徑:指的是以當(dāng)前正在處理的文件為基本路徑進(jìn)行操作。…/表示當(dāng)前文件的上一層文件夾,…/…/表示當(dāng)前文件的上上層文件夾。例:當(dāng)前文件路徑為:D:\Program Files\Tencent\123.txt,要獲取D:\Program Files\456.txt,可以用"…/456.txt"路徑表示。
tips:建議使用相對(duì)路徑,因?yàn)樵诎盐覀兊捻?xiàng)目打包發(fā)送給別人時(shí),別人直接就能運(yùn)行。而如果使用絕對(duì)路徑,那么還要額外發(fā)送外部的文件。

一、文件操作介紹

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

二、讀操作(r,rb)

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

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

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

            
          

#因?yàn)閞b讀取出來之后的數(shù)據(jù)是bytes類型,即就是字節(jié),所以我們?cè)谑褂胷b時(shí)可以不用指定encoding。
rb的作?: 在讀取非?本?件的時(shí)候,比如讀取MP3、圖像、 視頻等信息的時(shí)候就需要?到rb。 因?yàn)檫@種數(shù)據(jù)是沒辦法直接顯?出來的,還有,我們看的直播, 實(shí)際上都是這種數(shù)據(jù)。

讀取文件的方法

read():將文件里的內(nèi)容全部讀取出來。弊端:如果文件內(nèi)容數(shù)據(jù)過大,讀取時(shí)將會(huì)非常占用內(nèi)存且非常緩慢,嚴(yán)重會(huì)導(dǎo)致內(nèi)存崩潰。

            
              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個(gè)字符。需要注意的是,如果你已經(jīng)進(jìn)行了讀取操作,那么下一次讀取將會(huì)從光標(biāo)定位處繼續(xù)讀取,即上次讀取完的位置。rb讀取出來的是字節(jié)。

            
              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():一次讀取一行數(shù)據(jù)。需要注意的是,每次讀取出來的數(shù)據(jù)末尾都會(huì)有\(zhòng)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():讀取所有數(shù)據(jù),將每一行數(shù)據(jù)形成一個(gè)元素放在一個(gè)列表中。弊端:和read()一樣,都是全部將數(shù)據(jù)讀取出來,容易導(dǎo)致內(nèi)存崩潰。

            
              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

            
          

循環(huán)讀取:for line in f: pass。優(yōu)點(diǎn):循環(huán)一次讀取一行,不會(huì)產(chǎn)生內(nèi)存突然溢出崩潰這種情況。(建議使用)

            
              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)

寫的時(shí)候注意。 如果沒有?件,則會(huì)創(chuàng)建?件。 如果?件存在, 則將原件中原來的內(nèi)容刪除, 再寫入新內(nèi)容。

            
              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模式寫入時(shí),不需要指定文件的編碼格式,但是在將內(nèi)容寫入時(shí),要將內(nèi)容轉(zhuǎn)換成對(duì)應(yīng)格式的bytes類型
f.flush()
f.close()

            
          

四、追加操作(a,ab)

在追加模式下,我們寫入的內(nèi)容會(huì)追加在?件的結(jié)尾。

            
              f = open("file/dog", mode = "a", encoding="utf-8")
f.write("你是最靚的仔")
f.flush()
f.close()
五、讀寫操作(r+,r+b)
在讀寫操作模式下,必須先進(jìn)行讀操作,再進(jìn)行寫操作,因?yàn)楣鈽?biāo)默認(rèn)是在開頭的,讀取會(huì)默認(rèn)從頭開始讀到尾,在開始寫。

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

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

            
          
開頭前三個(gè)字將會(huì)被“哈哈哈”替換,然后讀取的內(nèi)容也是從第三個(gè)字之后開始讀取。

核能警告:在r+模式下,如果你讀取了內(nèi)容,不管你讀取了多少內(nèi)容,光標(biāo)定位在何處,后面的寫操作都將追加在文件內(nèi)容末尾。如果你沒有先進(jìn)行讀取操作而是先進(jìn)行了寫操作,那么寫操作會(huì)將寫入的內(nèi)容替換掉開頭對(duì)應(yīng)長(zhǎng)度的內(nèi)容。

六、寫讀操作(w+,w+b)
在寫讀模式下,先將內(nèi)容清空,然后寫入內(nèi)容。在進(jìn)行讀操作時(shí),因?yàn)樵谶M(jìn)行寫操作時(shí)光標(biāo)已定位在末尾,所以讀取不到任何內(nèi)容。所以寫讀模式不常使用。

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

            
          

#為什么不能先進(jìn)行讀操作在進(jìn)行寫操作?
#因?yàn)樵趙+模式下,先進(jìn)行讀操作是讀不出來任何數(shù)據(jù)的,然后在進(jìn)行寫數(shù)據(jù),又是將內(nèi)容清空寫入。所以無論是先讀后寫還是先寫后讀都是一樣的結(jié)果。

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

在a+操作時(shí),無論是先進(jìn)行讀操作還是后進(jìn)行讀操作都無法讀取到數(shù)據(jù),因?yàn)楣鈽?biāo)始終定位在文件內(nèi)容末尾處。

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

            
          

八、其它相關(guān)操作

seek(n, type):光標(biāo)移動(dòng)到n個(gè)字節(jié)位置,因?yàn)槲覀兇蟛糠质遣捎胾tf-8的編碼格式,所以一般n取得都是3的倍數(shù)。
seek()第一個(gè)參數(shù)指移動(dòng)的字節(jié)數(shù)。
seek()第二個(gè)參數(shù)指的是從哪個(gè)位置進(jìn)行偏移。取值可以是0,1,2。默認(rèn)是0。
0:指相對(duì)開頭偏移
1:指相對(duì)本身位置進(jìn)行偏移
2:指相對(duì)結(jié)尾偏移
開頭:seek(0)
結(jié)尾:seek(0, 2)
tell():幫助我們獲取當(dāng)前光標(biāo)位置,返回的值也是以字節(jié)為單位進(jìn)行度量的。

truncate():截?cái)辔募?

            
              f = open("?娃娃", mode="w", encoding="utf-8")
f.write("哈哈") # 寫?兩個(gè)字符
f.seek(3) # 光標(biāo)移動(dòng)到3, 也就是兩個(gè)字中間
f.truncate() # 刪掉光標(biāo)后?的所有內(nèi)容
f.close()
做截?cái)嗖僮髦埃扰矂?dòng)光標(biāo),挪動(dòng)到你想要截?cái)嗟奈恢茫?然后再進(jìn)?截?cái)唷jP(guān)于truncate(n), 如果給出了n, 則從開頭開頭進(jìn)?截?cái)啵?如果不給n, 則從當(dāng)前位置截?cái)啵?后?的內(nèi)容將會(huì)被刪除。

            
          

九、修改文件

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

            
              #文件修改
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 爬百度貼吧圖片

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

#獲取所有的圖片img
result_imgs  =  result.find_all("img",class_= "BDE_Image")
print(result_imgs)
i = 1   #計(jì)數(shù)器
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

            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产精品久久久久久久久免费 | 亚洲AV综合AV国产AV | 欧美成人在线视频 | 国产一区二区av | 久久精品一区二区三区不卡牛牛 | 成人午夜精品久久久久久久小说 | 亚欧精品一区二区三区四区 | 日韩第3页| 一区二区三区四区国产 | 亚洲视频三区 | 欧美高清成人 | 亚洲一区二区三区久久精品 | 久久久久99 | 欧美精品一区久久 | 麻豆av免费观看 | 欧美日韩在线观看视频 | 午夜视频在线观看免费观看在线观看 | 三级网站免费观看 | 欧美日韩在线免费观看 | 一级福利| 九九视频精品全部免费播放 | 91精品国产综合久久精品 | 国产色产综合色产在线观看视频 | 精品福利av导航 | 丁香婷婷色综合亚洲小说 | 日日操夜夜操天天操 | 亚洲成人国产综合 | 91精品啪国产在线观看免费牛牛 | 欧美久久久久久 | 色秀视频免费高清网站 | 天天做天天干 | 国产三级网站在线观看 | 日本三级视频 | 亚洲欧洲精品视频在线观看 | 成人国内精品久久久久影 | 国产成人免费视频网站高清观看视频 | 久久经典国产视频 | 国产视频一区二区 | 国产精品一区久久久久 | 中文字幕亚洲欧美日韩在线不卡 | 日韩在线不卡一区 |