Python讀寫文件

最近得以空閑,然后繼續學習py。


學習一下py中最頻繁用到的文件讀寫的方法。

在py中,操作是通過文件對象【File obj】實現的,通過文件對象可以讀寫文本文件和一些二進制文件。

1.打開文件

使用Python中的open函數。有8個參數,但是我們常用的就2個足夠了。

# 使用所有參數打開文件
with open('example.txt', mode='r', buffering=1, encoding='utf-8', errors='ignore', newline='\n', closefd=True, opener=None) as f:# 讀取文件內容content = f.read()print(content)
  • file參數
    如果是字符串,則代表的是文件名字,文件名字可以是相對當前目錄的路徑,也可以是絕對路徑;如果是一個整數,則代表文件描述符,文件描述符指向一個打開的文件。
  • mode參數

下面是常用的文件打開模式:

  1. 只讀模式 (r)

    • 描述:以只讀模式打開文件。文件指針將會放在文件的開頭。如果文件不存在,會拋出 FileNotFoundError 異常。
    • 示例open('filename.txt', 'r')
  2. 寫入模式 (w)

    • 描述:以寫入模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會創建一個新文件。如果文件存在,會截斷文件(即清空文件內容)。
    • 示例open('filename.txt', 'w')
  3. 追加模式 (a)

    • 描述:以追加模式打開文件。文件指針會放在文件的末尾。如果文件不存在,會創建一個新文件。如果文件存在,寫入的數據將會追加到文件的末尾。
    • 示例open('filename.txt', 'a')
  4. 讀寫模式 (r+)

    • 描述:以讀寫模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會拋出 FileNotFoundError 異常。
    • 示例open('filename.txt', 'r+')
  5. 寫入讀模式 (w+)

    • 描述:以寫入讀模式打開文件。文件指針會放在文件的開頭。如果文件不存在,會創建一個新文件。如果文件存在,會截斷文件。
    • 示例open('filename.txt', 'w+')
  6. 追加讀模式 (a+)

    • 描述:以追加讀模式打開文件。文件指針會放在文件的末尾。如果文件不存在,會創建一個新文件。如果文件存在,寫入的數據將會追加到文件的末尾。可以進行讀寫操作。
    • 示例open('filename.txt', 'a+')
  7. 二進制模式 (b)

    • 描述:以二進制模式打開文件。可以與上述模式組合使用,例如 rbwbabr+b 等。用于讀取或寫入二進制文件,如圖片、音頻等。
    • 示例open('filename.bin', 'rb')
  8. 文本模式 (t)

    • 描述:以文本模式打開文件。默認模式,可以與上述模式組合使用,例如 rtwtatr+t 等。用于讀取或寫入文本文件。
    • 示例open('filename.txt', 'rt')

示例代碼

以下是一些打開文件的示例代碼:

# 以只讀模式打開文本文件
with open('example.txt', 'r', encoding='utf-8') as f:content = f.read()# 以寫入模式打開文本文件
with open('example.txt', 'w', encoding='utf-8') as f:f.write("Hello, World!")# 以追加模式打開文本文件
with open('example.txt', 'a', encoding='utf-8') as f:f.write("Appending some text.")# 以二進制模式打開文件
with open('example.bin', 'rb') as f:binary_content = f.read()# 以讀寫模式打開文件
with open('example.txt', 'r+', encoding='utf-8') as f:f.write("Read and write.")f.seek(0)content = f.read()

2.關閉文件

當使用了open打開文件之后,要記得寫關閉文件,否則會拋異常。

常規就是調用一次open,然后尾部寫一下close。

但是一般情況下,文件的操作往往會拋出異常,為了保證文件的操作無論正常結束還是異常結束都能夠關閉文件,使用with as 代碼塊來進行自動資源管理。

import unittestclass MyTestCase(unittest.TestCase):def test_something(self):# self.assertEqual(True, False)  # add assertion here# print("hello world")fobj = open("test.txt", "w+",encoding="utf-8")fobj.write("hello world")fobj.close()with open("test.txt", "a+",encoding="utf-8") as f:f.write("\n大家好~")if __name__ == '__main__':unittest.main()

這樣子執行的話,就是創建了一個文件,往里面寫入了一句話。

注意

  • 文件有編碼的,需要指定
  • 用完要關閉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15591.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024.5.25.python.exercise

# # 導入數據處理的包 # # from pyecharts.charts import Line # # from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts, LabelOpts # # import json # # # # # 打開文件 # # file_us open("美國.txt", "r", encoding&quo…

C++ Primer Plus第十八章復習題

1、使用用大括號括起的初始化列表語法重寫下述代碼。重寫后的代碼不應使用數組ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv,zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

頭歌OpenGauss數據庫-H.存儲過程第1關:創建存儲過程

編程要求 數據庫中已經存在三個基礎表: student ( num integer, name char(20), age integer, level integer, dept char(20) ); course ( id integer, name char(20) ); sel_course ( studentid integer, courseid integer, score integer ); 創建存儲過程&#xf…

Vue3/Vite引入EasyPlayer.js播放H265視頻錯誤的問題

一、引入EasyPlayer.js github鏈接:GitHub - EasyDarwin/EasyPlayer.js: EasyPlayer.js H5播放器 將demo/html目錄下的 EasyPlayer-element.min.js、EasyPlayer-lib.min.js、EasyPlayer.wasm、jquery.min.js 復制到vue3工程的public目錄下,注意,vue3 vite的index.html文件…

win10配置wsl的深度學習環境

# 1、一步完成wsl:開啟虛擬機、linux子系統、并下載ubuntu # 官方文檔: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打開windows terminal,選ubuntu交互環境 # 第一次需要配置用戶名和密碼 # 接下來正常使用即可# 3、cud…

自然資源-做好用地用海國土空間規劃符合性審查

自然資源-做好用地用海國土空間規劃符合性審查 為發揮國土空間規劃戰略引領和剛性管控作用,強化國土空間規劃對各專項規劃的指導約束作用,依法依規加強自然資源要素保障,做好用地用海用島國土空間規劃符合性審查工作: 一、加快地…

深入了解數據庫設計中的規范化與反規范化

目錄 零、前言 一、一些基本術語 二、關系模式 2.1. 什么是關系模式 2.2. 示例 三、數據依賴 3.1. 函數依賴 3.1.1. 完全函數依賴 3.1.2. 部分函數依賴 3.1.3. 傳遞函數依賴 3.2. 多值依賴 3.3. 連接依賴 四、規范化 4.1. 第一范式(1NF) …

什么是 DNS 轉發?

DNS轉發是一種網絡傳輸技術,主要用于解決本地DNS服務器無法直接解析某個特定域名的情況。當本地DNS服務器收到一個無法解析的域名請求時,它會將該請求轉發給其他可信的DNS服務器,以獲取所需的解析結果。這種技術有助于優化網絡性能和安全性&a…

【Flutter】有狀態組件StatefulWidgetScaffold組件屬性

🔥 本文由 程序喵正在路上 原創,CSDN首發! 💖 系列專欄:Flutter學習 🌠 首發時間:2024年5月26日 🦋 歡迎關注🖱點贊👍收藏🌟留言🐾 目…

AWS聯網和內容分發之VPC

Amazon Virtual Private Cloud(VPC)是一項用于在AWS云中創建一個邏輯隔離的虛擬網絡的服務,使用戶能夠在云中啟動AWS資源(例如EC2實例),并將其放置在自己定義的虛擬網絡中。 Amazon VPC讓您能夠全面地控制…

AEE運行機制深入剖析——閱讀筆記

AEE運行機制深入剖析——閱讀筆記 在移動設備和嵌入式系統的開發中,應用執行環境(Application Execution Environment,簡稱AEE)起著至關重要的作用。AEE是操作系統層面的一個框架,負責管理應用程序的生命周期&#xf…

JVM性能調優:內存模型及垃圾收集算法

JVM內存結構 根據Java虛擬機規范,JVM內存主要劃分為以下區域: 年輕代(New Generation) 包括Eden空間,用于存放新創建的對象。Survivor區由兩個相同大小的Survivor1和Survivor2組成,用于存放經過初次垃圾回…

AI菜鳥向前飛 — LangChain系列之十四 - Agent系列:從現象看機制(上篇)

上一篇介紹了Agent與LangGraph的基礎技能Tool的必知必會 AI菜鳥向前飛 — LangChain系列之十三 - 關于Tool的必知必會 前面已經詳細介紹了Promp、RAG,終于來到Agent系列(別急后面還有LangGraph),大家可以先看下這張圖&#xff1…

leetcode328. 奇偶鏈表,附詳細解析和代碼注釋

leetcode328. 奇偶鏈表 給定單鏈表的頭節點 head ,將所有索引為奇數的節點和索引為偶數的節點分別組合在一起,然后返回重新排序的列表。 第一個節點的索引被認為是 奇數 , 第二個節點的索引為 偶數 ,以此類推。 請注意&#xff0…

Java的反射機制詳解:動態操作類和對象

Java反射是一種強大的機制,允許程序在運行時查詢和操作類、方法、接口等。這種能力使得Java應用可以在運行時動態地創建對象、調用方法和訪問屬性,極大地提升了程序的靈活性和可擴展性。本文將深入探討Java反射的原理、核心API和實際應用場景&#xff0c…

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南 在Flutter框架中,CupertinoSlidingSegmentedControl是一個用于創建類似iOS風格的滑動分段控制器的小部件。這種控制器通常用于允許用戶在不同的視圖或設置之間切換。本文將為您提供一個…

輕量級 K8S 環境 安裝minikube

文章目錄 操作系統DockerDocker CE 鏡像源站使用官方安裝腳本自動安裝 (僅適用于公網環境)安裝校驗Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard參考資料 操作系統 …

Docker進入容器查看內容并從容器里拷貝文件到宿主機

工作中需要從docker正在運行的鏡像中復制文件到宿主機,于是便將這個過程記錄了下來。 (1)查看正在運行的容器 通過以下命令,可以查看正在運行的容器: docker ps (2)進入某個容器執行腳本 我…

前端人員選擇組件封裝

功能&#xff1a; 人員選擇&#xff0c;返回人員參數&#xff0c;以及人員參數id數組支持單選&#xff0c;多選人員支持重新選擇回顯上次選中人員 <!-- 彈窗 --><a-modal v-model"modalVisible" :footer"null" :bodyStyle"{ padding: 0 }&q…

react中子傳父信息

思路是&#xff1a; 在父組件定義一個函數接受參數&#xff0c;接收的參數用于接收子組件的信息&#xff0c;把函數傳給子組件&#xff0c;子組件調用父親傳來的函數并把要告訴父親的話傳到函數中&#xff0c;就實現了子傳父消息 import { useState } from reactimport { use…