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

Python文件讀寫with的本質(zhì)示例詳解

 更新時間:2026年06月16日 10:08:08   作者:貓咪老師  
Python提供了一個非常強大的內(nèi)置結(jié)構(gòu)with上下文管理器,它能讓我們以一種簡潔、安全、自動的方式完成文件操作,是構(gòu)建現(xiàn)代、高效、可維護性強的數(shù)據(jù)處理流程的關(guān)鍵工具之一,這篇文章主要介紹了Python文件讀寫with本質(zhì)的相關(guān)資料,需要的朋友可以參考下

文件讀寫是日常開發(fā)中非常常見的一類操作,無論是處理日志、配置文件,還是接口數(shù)據(jù)落地,都離不開 I/O。

基礎(chǔ):open / read / write

Python 中通過 open() 打開文件,返回一個文件對象:

# 打開文件(只讀模式)
f = open("test.txt", "r", encoding="utf-8")

content = f.read()
print(content)

f.close()

常見模式包括:

  • "r":只讀(默認)
  • "w":寫入(會覆蓋原內(nèi)容)
  • "a":追加寫入
  • "rb" / "wb" :二進制模式

寫文件示例:

f = open("output.txt", "w", encoding="utf-8")
f.write("Hello, Python I/O")
f.close()

這里需要注意兩點:

  1. 忘記 close() 可能導(dǎo)致資源未釋放;
  2. "w" 模式會清空文件內(nèi)容。

文本文件處理

實際開發(fā)中,更常見的是逐行處理文本:

f = open("test.txt", "r", encoding="utf-8")

for line in f:
    print(line.strip())

f.close()

相比 read() 一次性讀取全部內(nèi)容,這種方式更適合內(nèi)容較多的文件。

with 語句(上下文管理)

with 語句可以自動管理文件資源,無需手動關(guān)閉:

with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

等價于:

  • 打開文件
  • 使用文件
  • 自動調(diào)用 close()

with 是處理文件的標準寫法,塊結(jié)束后自動關(guān)閉文件,哪怕中間拋了異常。在實際開發(fā)中,它可以避免資源泄露問題。

處理大文件(逐行讀?。?/h2>

如果文件有幾百 MB,一次性 read() 進內(nèi)存會很危險。推薦使用逐行讀取方式:

with open("big_file.txt", "r", encoding="utf-8") as f:
    for line in f:
        process(line)

或者更細粒度控制:

with open("big_file.txt", "r", encoding="utf-8") as f:
    while True:
        line = f.readline()
        if not line:
            break
        process(line)

這種方式只會在內(nèi)存中保留當(dāng)前行,適合日志分析、數(shù)據(jù)清洗等場景。

JSON 文件讀寫(高頻)

接口返回值、配置文件、爬蟲結(jié)果,很多場景都是 JSON 格式。Python 內(nèi)置的 json 模塊直接搞定:

讀取 JSON:

import json

with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

print(data)

寫入 JSON:

import json

data = {"name": "Alice", "age": 18}

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

參數(shù)說明:

  • ensure_ascii=False:避免中文被轉(zhuǎn)義
  • indent=2:美化輸出格式

總結(jié)

本篇的核心可以歸納為三點:

  1. 基礎(chǔ)操作:open / read / write
  2. 推薦寫法:使用 with 管理文件資源
  3. 常見場景:大文件處理 + JSON 讀寫

文件 I/O 本身不復(fù)雜,但在工程中幾乎無處不在。熟悉這些模式后,可以直接應(yīng)用到日志處理、數(shù)據(jù)落地、接口調(diào)試等多個場景中。

with 的本質(zhì):上下文管理器

with 并不只用于文件讀寫,它的本質(zhì)是上下文管理(context management)機制。文件只是一個常見應(yīng)用場景。可以把它理解為:在一段代碼執(zhí)行前后,自動做“準備”和“收尾”工作with 語句依賴一個對象,這個對象需要實現(xiàn)兩個方法:

__enter__()
__exit__()

執(zhí)行流程是:

with obj as x:
    # 執(zhí)行代碼塊

等價于:

x = obj.__enter__()
try:
    # 執(zhí)行代碼塊
finally:
    obj.__exit__()

也就是說:

  • enter():進入時執(zhí)行(資源初始化)
  • exit():退出時執(zhí)行(資源釋放)

with的其他用法

線程鎖(非常常見)

import threading

lock = threading.Lock()

with lock:
    # 臨界區(qū)代碼
    print("線程安全操作")

作用:

  • 自動加鎖(enter)
  • 自動釋放鎖(exit)

避免忘記 release() 導(dǎo)致死鎖。

數(shù)據(jù)庫連接 / 事務(wù)管理

很多數(shù)據(jù)庫庫支持:

with connection:
    cursor.execute("INSERT INTO table VALUES (1)")

或者:

with connection.cursor() as cursor:
    cursor.execute("SELECT * FROM table")

作用:

  • 自動提交或回滾事務(wù)
  • 自動關(guān)閉 cursor

臨時修改環(huán)境(如上下文切換)

from decimal import localcontext, Decimal

with localcontext() as ctx:
    ctx.prec = 2
    print(Decimal("1.12345") + Decimal("2.34567"))

print(Decimal("1.12345") + Decimal("2.34567"))

作用:

  • with 內(nèi)修改配置
  • 退出后恢復(fù)原狀態(tài)

自定義上下文管理器

可以自己定義 with 的行為:

class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        import time
        print("耗時:", time.time() - self.start)

with Timer():
    sum(range(1000000))

用途:

  • 統(tǒng)計耗時
  • 日志記錄
  • 資源管理

更優(yōu)雅的寫法:contextlib

Python 提供了更簡潔的方式:

from contextlib import contextmanager
import time

@contextmanager
def timer():
    start = time.time()
    yield
    print("耗時:", time.time() - start)

with timer():
    sum(range(1000000))

相比寫類:

  • 更少代碼
  • 更直觀

總結(jié)

with 的核心不是“文件操作”,而是讓“必須成對出現(xiàn)的操作”(獲取/釋放、開始/結(jié)束)變得安全且簡潔

常見組合包括:

  • 打開 / 關(guān)閉(文件)
  • 加鎖 / 解鎖(線程)
  • 開始 / 提交(數(shù)據(jù)庫)
  • 設(shè)置 / 恢復(fù)(環(huán)境)

到此這篇關(guān)于Python文件讀寫with本質(zhì)的文章就介紹到這了,更多相關(guān)Python文件讀寫with內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3 selenium 實現(xiàn)QQ群接龍自動化功能

    Python3 selenium 實現(xiàn)QQ群接龍自動化功能

    這篇文章主要介紹了Python3 selenium 實現(xiàn)QQ群接龍自動化功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python之列表推導(dǎo)式最全匯總(上篇)

    Python之列表推導(dǎo)式最全匯總(上篇)

    這篇文章主要介紹了Python之列表推導(dǎo)式最全匯總(上篇),本文章內(nèi)容詳細,通過案例可以更好的理解列表推導(dǎo)式的相關(guān)知識,本模塊分為了三部分,本次為上篇,需要的朋友可以參考下
    2023-01-01
  • Python實現(xiàn)模塊熱加載的示例代碼

    Python實現(xiàn)模塊熱加載的示例代碼

    這篇文章主要為大家詳細介紹了Python實現(xiàn)模塊熱加載的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-12-12
  • python中比較兩個列表的實例方法

    python中比較兩個列表的實例方法

    在本篇文章里小編給各位分享了關(guān)于python中比較兩個列表的實例方法以及相關(guān)代碼,需要的朋友們參考下。
    2019-07-07
  • python mysql實現(xiàn)學(xué)生成績管理系統(tǒng)

    python mysql實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python mysql實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 關(guān)于python的縮進規(guī)則的知識點詳解

    關(guān)于python的縮進規(guī)則的知識點詳解

    在本篇文章里小編給大家整理了關(guān)于python的縮進規(guī)則的知識點詳解,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Numpy與Pytorch 矩陣操作方式

    Numpy與Pytorch 矩陣操作方式

    今天小編就為大家分享一篇Numpy與Pytorch 矩陣操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 利用python控制Qt程序的示例詳解

    利用python控制Qt程序的示例詳解

    這篇文章主要為大家詳細介紹了如何利用python實現(xiàn)控制Qt程序,從而進行文本輸入,按鈕點擊等組件控制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Pytorch之finetune使用詳解

    Pytorch之finetune使用詳解

    今天小編就為大家分享一篇Pytorch之finetune使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python對RabbitMQ的簡單入門使用教程

    python對RabbitMQ的簡單入門使用教程

    RabbitMq是實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息代理中間件,下面這篇文章主要給大家介紹了關(guān)于python對RabbitMQ的簡單入門使用,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06

最新評論

新安县| 绵竹市| 中卫市| 兴文县| 云霄县| 承德市| 志丹县| 晋州市| 阳新县| 汉川市| 金堂县| 罗田县| 甘德县| 章丘市| 建湖县| 九江市| 金昌市| 大化| 岳普湖县| 都昌县| 衡水市| 石林| 康平县| 醴陵市| 昂仁县| 禄丰县| 武定县| 中方县| 临沭县| 合川市| 岳池县| 竹山县| 文水县| 辽宁省| 萨迦县| 化州市| 偃师市| 叙永县| 大城县| 铜鼓县| 南涧|