亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python利用open函數(shù)讀寫(xiě)文件的示例詳解

 更新時(shí)間:2023年04月18日 08:31:56   作者:真的不能告訴你我的名字  
在目前的環(huán)境中,讀取文件應(yīng)該算是最基本的操作了,python也內(nèi)置了讀寫(xiě)文件的函數(shù),讓我們來(lái)看下Python是如何利用open函數(shù)讀寫(xiě)文件吧

在目前的環(huán)境中,讀取文件應(yīng)該算是最基本的操作了,python也內(nèi)置了讀寫(xiě)文件的函數(shù),讓我們來(lái)看下。這里有個(gè)小點(diǎn)要點(diǎn)一下,我們使用python是沒(méi)法辦直接操作文件的,而是操作系統(tǒng)給我們預(yù)留了接口,python通過(guò)操作系統(tǒng)接口才能去讀寫(xiě)文件。

還是提及一點(diǎn),編寫(xiě)這篇文章的python版本為:

最簡(jiǎn)單讀取文件操作

python中,直接使用open方法就可以打開(kāi)文件對(duì)象了。

open函數(shù)需要傳入的參數(shù)為open(文件名,模式,編碼),其中文件名必須要指定文件名。

例如,我們想打開(kāi)files.txt文件,可以這么寫(xiě):

f = open("files.txt")

這樣的話,我們就得到了一個(gè)文件句柄f。而直接調(diào)用f.read()即可讀取所有信息,例如:

我們有個(gè)文件,內(nèi)容如下:

我們可以使用如下代碼進(jìn)行讀取:

f = open("files.txt")
print(f.read())

結(jié)果如下:

操作一次文件讀寫(xiě)完整流程

上述代碼簡(jiǎn)單吧,但是也是有缺陷的,在于操作完畢后,沒(méi)有關(guān)閉文件句柄,此操作可能會(huì)引起數(shù)據(jù)丟失,因?yàn)槲覀兊臄?shù)據(jù)不是直接存到磁盤(pán)的,而是寫(xiě)到緩沖器,等量夠了之后,再進(jìn)行寫(xiě)入磁盤(pán)操作。

但是等我們?cè)趫?zhí)行close操作時(shí),會(huì)強(qiáng)制將緩沖器的內(nèi)容寫(xiě)到磁盤(pán)中去。

所以完整的讀寫(xiě)流程為:

  • 使用open打開(kāi)文件
  • 進(jìn)行讀寫(xiě)操作
  • 完畢后需要close文件

基本代碼為:

f = open("files.txt")
# 文件讀寫(xiě)操作
f.close()

還會(huì)有這樣的一種情況,就是文件讀寫(xiě)過(guò)程中出現(xiàn)異常了,拋錯(cuò),導(dǎo)致文件執(zhí)行不到f.close(),此時(shí)就沒(méi)辦法做關(guān)閉句柄的動(dòng)作。

這個(gè)時(shí)候,我們就可以使用with open() as f的方式來(lái)進(jìn)行打開(kāi)文件操作,with語(yǔ)句會(huì)在底層做關(guān)閉句柄操作,即使觸發(fā)異常,也會(huì)正常關(guān)閉句柄。

文件打開(kāi)方式

還記得第一段落所提及的open打開(kāi)的模式么? 其實(shí)指的是文件的打開(kāi)方式,默認(rèn)是只讀模式,即: r,除此之外,還有其他的方式,例如:

  • r: 文件以只讀方式打開(kāi)(也是默認(rèn)模式)。
  • w: 文件以寫(xiě)入方式打開(kāi),會(huì)重置文件。
  • x: 創(chuàng)建一個(gè)新文件且寫(xiě)入。
  • a: 追加寫(xiě)入(如果文件存在,會(huì)在末尾進(jìn)行追加)。
  • b: 文件以二進(jìn)制打開(kāi)。
  • t: 文件以文本模式打開(kāi)(也是默認(rèn)模式)。
  • +: 打開(kāi)文件進(jìn)行更新(可讀可寫(xiě))。

上述模式是可以疊加的,例如默認(rèn)的: rt。

如果模式不正確,則會(huì)拋錯(cuò),例如,我們使用默認(rèn)的rt打開(kāi)一個(gè)已有文件,進(jìn)行write寫(xiě)入:

f = open("files.txt","rt")
print(f.readline())
f.write("123")

執(zhí)行后發(fā)現(xiàn),其實(shí)f.readline已經(jīng)執(zhí)行成功了,而f.write失敗了,報(bào)錯(cuò)為沒(méi)有writeable。

此時(shí)我們?nèi)魧?quán)限修改為r+,則就不會(huì)報(bào)錯(cuò),我們?cè)囋嚳?/p>

程序修改為:

f=open("files.txt","r+")

print(f.readline())
f.write("123")
f.close()

執(zhí)行后查看文件

可以看到123已經(jīng)追加到文件中了,只不過(guò)沒(méi)有換行。

python提供的讀取方法有何意義

在上述段落中,我們已經(jīng)有了文件句柄f,關(guān)于讀取有如下幾種方法:

  • readlines: 一次性讀取所有行,然后將其按照列表的形式返回。
  • readline: 每次讀取一行,直至空。
  • read: 讀取全部數(shù)據(jù)并且返回。

readlines會(huì)讀取所有的行,并且按照列表的形式返回,例如:

f = open("files.txt","r")
print(f.readlines())
f.close()

上述代碼會(huì)將files.txt全部讀取完,并且按照換行作為分隔符,進(jìn)行拆分?jǐn)?shù)據(jù),并且按照列表的形式進(jìn)行返回。

執(zhí)行后效果為:

read則會(huì)讀取全部數(shù)據(jù)并且返回,當(dāng)然了,read還能接收參數(shù),例如read(10)就是讀取10個(gè)字節(jié)數(shù)據(jù),默認(rèn)是全部,例如:

f = open("files.txt","r")
print(f.read())
f.close()

執(zhí)行后效果為:

對(duì)于readline來(lái)說(shuō),它會(huì)讀取一行文件,我們可以結(jié)合with語(yǔ)句來(lái)操作,可以避免close。如何使用open...with配合readline讀取所有的行呢? 可以使用如下代碼實(shí)現(xiàn):

with open("files.txt","r+") as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

上述代碼中,我們使用了while True來(lái)進(jìn)行死循環(huán),將文件讀取完畢后,就退出循環(huán)。

小案例: 掃描redis配置文件

我們將使用python讀取文件操作,對(duì)redis.conf進(jìn)行讀取,將排查掉配置文件的空行和注釋行,并且將剔除配置文件之后的配置寫(xiě)入到新文件中newRedis.conf。

注意: redis使用#進(jìn)行注釋配置,例如:

cat redis.conf

# 這是注釋
bind 0.0.0.0 # 這也是注釋

由于該配置文件實(shí)在是太長(zhǎng)了,所以,我們隨機(jī)選擇一段進(jìn)行操作:

我們可以先使用寫(xiě)方式打開(kāi)新文件newRedis.conf,而后使用以只讀方式打開(kāi)redis.conf,而后逐行掃描,如果遇到空行,或者開(kāi)頭為#的就直接略過(guò),如果上述2者都不是,則是配置文件,注意配置文件是否包含注釋符號(hào)#,如果包含的話,需要略過(guò)#之后的數(shù)據(jù)。

import re

def main():
    with open("newRedis.cof","w+") as w:
        with open("redis.cof","r") as f:
            while True:
                line=f.readline()
                if not line:
                    break
                #去掉行首為#的注釋
                if re.match("#",line):
                    pass
                #去掉空行
                elif re.match("^$",line):
                    pass
                #去掉配置的注釋
                else:
                    if '#' in line:
                        s=re.findall("(.*)#".line)
                        w.write(s[0]+"\n")
                    else:
                        w.write(line)

if __name__ == '__main__':
    main()

上述代碼引入了re庫(kù)進(jìn)行處理,其中match代表匹配字符串行首,^$代表空行,而后再在配置文件中判斷#是否出現(xiàn)在語(yǔ)句中,如果出現(xiàn),再使用元組將第一個(gè)#配置前的數(shù)據(jù)抓出來(lái)。

最后將抓出的配置寫(xiě)入文件中即可。

執(zhí)行腳本后,查看newRedis.conf文件

總結(jié)

本篇文章介紹了python讀寫(xiě)文件,更推薦使用with open的方式,因?yàn)樗讓訒?huì)調(diào)用close方法,而不需要我們自己去寫(xiě)調(diào)用close方法。

最后我們寫(xiě)了一個(gè)小案例來(lái)屏蔽redis注釋和空行,僅讀取配置文件。

到此這篇關(guān)于Python利用open函數(shù)讀寫(xiě)文件的示例詳解的文章就介紹到這了,更多相關(guān)Python open讀寫(xiě)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何保存文本文件

    python如何保存文本文件

    在本篇文章中小編給大家分享的是關(guān)于python保存文本文件的方法,有需要的朋友們可以參考下。
    2020-06-06
  • python中賦值語(yǔ)句的特點(diǎn)和形式

    python中賦值語(yǔ)句的特點(diǎn)和形式

    這篇文章主要介紹了python中賦值語(yǔ)句的特點(diǎn)和形式,文中介紹了多目標(biāo)賦值的共享引用問(wèn)題,多目標(biāo)賦值其實(shí)是多個(gè)目標(biāo)對(duì)同一個(gè)內(nèi)存空間的引用,這里要分兩種情況,當(dāng)被引用對(duì)象是不可變對(duì)象時(shí)則不存在問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • python機(jī)器學(xué)習(xí)之決策樹(shù)分類詳解

    python機(jī)器學(xué)習(xí)之決策樹(shù)分類詳解

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)之決策樹(shù)分類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 使用Python編寫(xiě)Prometheus監(jiān)控的方法

    使用Python編寫(xiě)Prometheus監(jiān)控的方法

    今天小編就為大家分享一篇關(guān)于使用Python編寫(xiě)Prometheus監(jiān)控的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • python如何構(gòu)建mock接口服務(wù)

    python如何構(gòu)建mock接口服務(wù)

    這篇文章主要介紹了python如何構(gòu)建mock接口服務(wù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • PyTorch中torch.load()的用法和應(yīng)用

    PyTorch中torch.load()的用法和應(yīng)用

    torch.load()它用于加載由torch.save()保存的模型或張量,本文主要介紹了PyTorch中torch.load()的用法和應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Python 利用CSV模塊處理數(shù)據(jù)的實(shí)現(xiàn)實(shí)例

    Python 利用CSV模塊處理數(shù)據(jù)的實(shí)現(xiàn)實(shí)例

    CSV文件的一個(gè)主要優(yōu)點(diǎn)是有很多程序可以存儲(chǔ),轉(zhuǎn)換和處理純文本文件,本文主要介紹了Python 利用CSV模塊處理數(shù)據(jù)的實(shí)現(xiàn)實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Postman安裝與使用詳細(xì)教程 附postman離線安裝包

    Postman安裝與使用詳細(xì)教程 附postman離線安裝包

    這篇文章主要介紹了Postman安裝與使用詳細(xì)教程 附postman離線安裝包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • python geemap的安裝步驟及環(huán)境配置

    python geemap的安裝步驟及環(huán)境配置

    geemap是基于GEE由吳秋生老師二次開(kāi)發(fā)的一個(gè)包,geemap主要使用python來(lái)進(jìn)行實(shí)現(xiàn)相關(guān)功能,這篇文章主要介紹了geemap的詳細(xì)安裝步驟及環(huán)境配置,需要的朋友可以參考下
    2022-08-08
  • Flaks基礎(chǔ)之在URL中添加變量的實(shí)現(xiàn)詳解

    Flaks基礎(chǔ)之在URL中添加變量的實(shí)現(xiàn)詳解

    這篇文章主要介紹了在python開(kāi)發(fā)中,F(xiàn)laks框架之上在URL鏈接中添加變量的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09

最新評(píng)論