欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

最簡單讀取文件操作

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

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

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

f = open("files.txt")

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

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

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

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

結(jié)果如下:

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

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

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

所以完整的讀寫流程為:

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

基本代碼為:

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

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

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

文件打開方式

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

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

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

如果模式不正確,則會拋錯,例如,我們使用默認(rèn)的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。

此時我們?nèi)魧?quán)限修改為r+,則就不會報錯,我們試試看

程序修改為:

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

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

執(zhí)行后查看文件

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

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

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

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

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

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

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

執(zhí)行后效果為:

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

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

執(zhí)行后效果為:

對于readline來說,它會讀取一行文件,我們可以結(jié)合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文件

總結(jié)

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

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

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

相關(guān)文章

  • python如何保存文本文件

    python如何保存文本文件

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

    python中賦值語句的特點和形式

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

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

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

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

    今天小編就為大家分享一篇關(guān)于使用Python編寫Prometheus監(jiān)控的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    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)用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python 利用CSV模塊處理數(shù)據(jù)的實現(xiàn)實例

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

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

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

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

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

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

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

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

最新評論