最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

還是提及一點,編寫這篇文章的python版本為:

最簡單讀取文件操作

python中,直接使用open方法就可以打開文件對象了。

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

例如,我們想打開files.txt文件,可以這么寫:

f = open("files.txt")

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

我們有個文件,內容如下:

我們可以使用如下代碼進行讀取:

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

結果如下:

操作一次文件讀寫完整流程

上述代碼簡單吧,但是也是有缺陷的,在于操作完畢后,沒有關閉文件句柄,此操作可能會引起數(shù)據(jù)丟失,因為我們的數(shù)據(jù)不是直接存到磁盤的,而是寫到緩沖器,等量夠了之后,再進行寫入磁盤操作。

但是等我們在執(zhí)行close操作時,會強制將緩沖器的內容寫到磁盤中去。

所以完整的讀寫流程為:

  • 使用open打開文件
  • 進行讀寫操作
  • 完畢后需要close文件

基本代碼為:

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

還會有這樣的一種情況,就是文件讀寫過程中出現(xiàn)異常了,拋錯,導致文件執(zhí)行不到f.close(),此時就沒辦法做關閉句柄的動作。

這個時候,我們就可以使用with open() as f的方式來進行打開文件操作,with語句會在底層做關閉句柄操作,即使觸發(fā)異常,也會正常關閉句柄。

文件打開方式

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

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

上述模式是可以疊加的,例如默認的: rt

如果模式不正確,則會拋錯,例如,我們使用默認的rt打開一個已有文件,進行write寫入:

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

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

此時我們若將權限修改為r+,則就不會報錯,我們試試看

程序修改為:

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

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

執(zhí)行后查看文件

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

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

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

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

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

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

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

執(zhí)行后效果為:

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

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

執(zhí)行后效果為:

對于readline來說,它會讀取一行文件,我們可以結合with語句來操作,可以避免close。如何使用open...with配合readline讀取所有的行呢? 可以使用如下代碼實現(xiàn):

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

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

小案例: 掃描redis配置文件

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

注意: redis使用#進行注釋配置,例如:

cat redis.conf

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

由于該配置文件實在是太長了,所以,我們隨機選擇一段進行操作:

我們可以先使用寫方式打開新文件newRedis.conf,而后使用以只讀方式打開redis.conf,而后逐行掃描,如果遇到空行,或者開頭為#的就直接略過,如果上述2者都不是,則是配置文件,注意配置文件是否包含注釋符號#,如果包含的話,需要略過#之后的數(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庫進行處理,其中match代表匹配字符串行首,^$代表空行,而后再在配置文件中判斷#是否出現(xiàn)在語句中,如果出現(xiàn),再使用元組將第一個#配置前的數(shù)據(jù)抓出來。

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

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

總結

本篇文章介紹了python讀寫文件,更推薦使用with open的方式,因為它底層會調用close方法,而不需要我們自己去寫調用close方法。

最后我們寫了一個小案例來屏蔽redis注釋和空行,僅讀取配置文件。

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

相關文章

  • 使用python腳本檢查ssl證書到期時間

    使用python腳本檢查ssl證書到期時間

    這篇文章主要為大家介紹了使用python腳本檢查ssl證書到期時間,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • python 內置模塊詳解

    python 內置模塊詳解

    模塊是一個保存了Python代碼的文件。模塊能定義函數(shù),類和變量。模塊里也能包含可執(zhí)行的代碼,今天我們就來詳細探討下python內置的一些常用模塊
    2019-01-01
  • python版本的仿windows計劃任務工具

    python版本的仿windows計劃任務工具

    這篇文章主要介紹了python版本的仿windows計劃任務工具,計劃任務工具根據(jù)自己設定的具體時間,頻率,命令等屬性來規(guī)定所要執(zhí)行的計劃,當然功能不是很全大家可以補充
    2018-04-04
  • Python字典的核心底層原理講解

    Python字典的核心底層原理講解

    今天小編就為大家分享一篇關于Python字典的核心底層原理講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 使用Python對接OpenAi?API實現(xiàn)智能QQ機器人的方法

    使用Python對接OpenAi?API實現(xiàn)智能QQ機器人的方法

    這篇文章主要介紹了使用Python對接OpenAi?API實現(xiàn)智能QQ機器人的方法,主要是提供一個方法思路,可以根據(jù)實現(xiàn)代碼延申出更多的解決方法,需要的朋友可以參考下
    2023-03-03
  • selenium執(zhí)行js并繞過webdriver監(jiān)測常見方法

    selenium執(zhí)行js并繞過webdriver監(jiān)測常見方法

    這篇文章主要為大家介紹了selenium執(zhí)行js并繞過webdriver監(jiān)測常見方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Python操作rabbitMQ的示例代碼

    Python操作rabbitMQ的示例代碼

    這篇文章主要介紹了Python操作rabbitMQ的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Python基于Opencv識別兩張相似圖片

    Python基于Opencv識別兩張相似圖片

    這篇文章主要介紹了Python基于Opencv識別兩張相似圖片的步驟,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • python中的Pytorch建模流程匯總

    python中的Pytorch建模流程匯總

    這篇文章主要介紹了python中的Pytorch建模流程匯總,主要幫大家?guī)椭蠹沂崂砩窠?jīng)網(wǎng)絡訓練的架構,具有一的的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-03-03
  • python獲取字符串中的email

    python獲取字符串中的email

    這篇文章主要介紹了python獲取字符串中的email,通過調用re庫,通過使用compile、findall獲取字符串中的email,下文詳細實現(xiàn)過程需要的小伙伴可以參考一下
    2022-03-03

最新評論

信阳市| 灵石县| 祁阳县| 启东市| 潼关县| 锦州市| 嘉祥县| 昌黎县| 高唐县| 柘荣县| 泗阳县| 天长市| 甘泉县| 涿州市| 和田县| 安宁市| 湖北省| 渑池县| 潮安县| 九江市| 长治市| 湟源县| 云梦县| 绍兴市| 永仁县| 江北区| 松阳县| 思南县| 陵川县| 罗田县| 芷江| 富顺县| 桦川县| 仁怀市| 富川| 青岛市| 巴青县| 景宁| 铜陵市| 临朐县| 札达县|