Python_文件操作_學習

目錄

一、關于文件的打開和關閉

1. 文件的打開

2.文件的關閉

二、文件的讀取

1. 文件的讀_r

2. 使用readline

3.使用readlines

三、文件的寫入

1. 文本的新建寫入

2.文本的追加寫入

四、文件的刪除和重命名

1.文件的重命名

2.文件的刪除

五、文件的定位讀寫

1.tell(?)函數

2.seek(?)函數

附錄 P.S.


一、關于文件的打開和關閉

1. 文件的打開

在Python中,open函數用來打開文件,語法格式如下:?

常見的文件打開模式:

又通過互相組合可以得到幾個新的常見模式:

栗子:

當我們只打開某個文件時,要先確保這個文件是存在的。

所以,先創建一個文本文件(與創建python文件類似):

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在項目欄中 鼠標右擊-->新建-->文件

輸入想命名的名字,寫上后綴 .txt ?

然后輸入內容...?

最后、回到python文件,打開一個文本文件

根據填寫要求,文件名是一定要有的,模式可以選填,如果不填,則要保證文本是存在的,否則報錯。

控制臺結果顯示:這個字符串表示的是一個已經打開的文本文件 poem.txt,它被設置為只讀模式,并且使用 GBK 編碼進行文本的編碼和解碼。

2.文件的關閉

文件的關閉強調打開了的文件,要使用close語句關閉。因為即便文件會在程序退出后自動關閉,但考慮到數據的安全性,在每次使用完文件后,都要使用close語句關閉文件,否則一旦程序奔潰就可能導致文件中的數據沒有保存。

二、文件的讀取

1. 文件的讀_r

f = open("poem.txt", "r", encoding="utf-8")
'''打開事先備好的文本文件,填“r”讀的模式,后面是編碼方式
如果你測試的文本文件txt內容含有中文,最好寫上encoding編碼方式,否則報錯'''
content = f.read()  # 對f變量進行讀取操作再賦給content
print(content)
f.close()

打印結果:

2. 使用readline

readline方法是逐行讀取,比較繁瑣...

f = open('poem.txt', "r", encoding='utf-8')
c1 = f.readline()
c2 = f.readline()
c3 = f.readline()
c4 = f.readline()
c5 = f.readline()
c6 = f.readline()
print(c1)
print(c2)
print(c3)
print(c4)
print(c5)
print(c6)
f.close()

考慮文本中存在換行以及print自帶換行,最后結果是每行之間 空的比較大

3.使用readlines

readlins的用法是把整個文本內容一次性都讀取了。

栗子:

這里我們用with...as:語句。因為Python中 ,with...as:語句是一種很好的上下文管理器, 可以確保無論代碼塊中發生什么情況,文本資源最終都會被正確地釋放和關閉。可以防止忘記寫close( )。

這里事先換了首詩,可看到系統自動加\n換行,所以為了好看點,readlines一般可以和for語句一起用:?

with open("poem.txt", "r", encoding="utf-8") as f:c = f.readlines()for p in c:  # 使用for循環,可以逐行顯示序列print(p)

打印結果:

三、文件的寫入

1. 文本的新建寫入

向文件寫入數據時,如果文件不存在,那么系統會自動創建一個文件并寫入數據。如果文件存在,那么會清空文件原有的數據,重新寫入新數據。

最后控制臺顯示的是 字符數:49

2.文本的追加寫入

文本的追加寫入,我們用模式“ a ”

在文末添加內容根據注意換行啊

四、文件的刪除和重命名

在Python中,我們要對文本文件進行刪除和重命名的話,可以使用標準庫中的os模塊。與讀取類似,對文件刪除或重命名之前,最好先檢查文件是否存在,以避免拋出異常。

1.文件的重命名

os模塊通過rename函數對文件重命名,rename函數接收兩個參數,分別是舊的文件名和新的文件名。

栗子:

# 引入os模塊
import os 
# 將 poem 改成 love_poem
os.rename('poem.txt', "love_poem.txt")

運行后,會發現原來目錄下面文本文件的名字已改?

2.文件的刪除

文件的刪除用到os模塊中的remove函數,remove函數接受一個參數,即要刪除的文件的路徑。如果文件被成功刪除,該函數不會有任何返回值。如果文件不存在,os.remove()會拋出一個 FileNotFoundError 異常。

例如:

# 引入os模塊
import os
# 刪除love_poem的文本文件
os.remove('love_poem.txt')

五、文件的定位讀寫

在Python中,文件的讀寫定位是指 “控制文件讀寫操作的位置”,以便于能夠從文件的特定位置開始讀取或寫入數據。?通常通過文件的指針來實現,該指針指示下一次讀寫操作將在文本的哪個位置進行。以下兩個函數是常見的獲取和設置文件指針的位置。

1.tell(?)函數

tell()函數會返回文件指針的當前位置,注意中英文字符對位置的影響。

# 打開一個存在的文本文件
f = open("poem.txt", "r", encoding="utf-8")
# 這里偏移量為4,
words = f.read(4)
print("第一次讀取的數據:"words)
# 查找當前位置
position =f.tell()
print("第一次的位置是:",position)words = f.read(16)
print("第二次讀的數據:",words)
position =f.tell()
print("第二次位置是:,position)

測試的文本:?

?

打印結果:

這里第一次位置1844.....我也不懂咋來的,希望有懂的大佬,不吝賜教,留言相告哈。

然后,轉成字母,顯示位置就正常^-^。

2.seek(?)函數

如果希望 重置(重新定位) 指針的位置,可以考慮seek函數

seek函數語法格式:

(1)offset :?表示偏移量,也就是需要移動的字節數。

(2)whence:?表示方向,該參數的值有以下三個:

0?:?是whence參數的默認值,表示從文件的起始位置開始偏移,所以也可以不寫。

1?:?表示從文件當前的位置開始偏移。

2 :?表示從文件末尾開始偏移。

f = open("poem.txt", "r", encoding="utf-8")
words = f.read(4)
print("第一次讀取的數據:", words)
position = f.tell()
print("第一次讀取的位置:", position)f.seek(10)  # 從初始開始偏移10個
position = f.tell()
print("第二次位置是:", position)
words = f.read(20)
print("第二次讀取的數據:", words)
f.close()

后半段seek函數重新偏移從開頭到位置10時,接著開始第二次讀取20個字符,這20個字符是在第10個字符位置的基礎上再往后讀20個。

這里10大概是:一行5字+1符號+1換行,然后’唐’前我是2個空格

附錄 P.S.

關于“字符、字節..”的一些百度:

1.空格:?在UTF-8編碼中,一個空格字符(在 ASCII表中)占用一個字節。

2.中文字符:?UTF-8 是一種可變長度的編碼系統,中文字符可能占用3個字節或者更多,具體取決于字符的Unicode碼點。

3.英文字符:?大多數英文字符(包括英文字母和一些基本標點符號)在 UTF-8 編碼中通常占用一個字節。

4.中文標點:?中文標點符號的字節數也可能不同,一些常見的中文標點符號可能占2個或3個字節。

5.英文標點:?大多數英文標點符號,如句號(.)、逗號(,)、分號(;)等,在 UTF-8 編碼中通常占用一個字節。

6.特殊字符:?一些特殊字符,如 emoji (表情)或其他非ASCII字符,可能占用更多的字節,。

總之,在處理文本時,字符計數通常是指邏輯字符的數量,而不是字節數。在UTF-8編碼中,一個中文字符可能占用多個字節,但仍然被視為一個邏輯字符。同樣,空格和標點符號,無論它們占用多少字節,通常每個都被視為一個邏輯字符。(如:len() 函數)來獲取字符串的長度時,它返回的是邏輯字符的數量,而不是字節數。

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

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

相關文章

RK 11.0 多屏模式下修改鼠標進入方式

要求:主屏在左,副屏在右。這種排列情況下鼠標僅可通過主屏的最右側移入副屏的最左側,或從副屏的最左側移入主屏最右側。 1.RK默認設計 1.1 RK的代碼設計是當sys.mouse.presentation1時,鼠標在屏幕邊緣的時候就會移入另一個屏幕 …

CISP-PTE筆記整理

目錄 漏洞基礎代碼合集 網安基礎 常見名詞 信息收集 環境和變量的配置 HTTP請求頭基礎 HTTP基礎知識 MySql基礎語法 各系統的敏感目錄路徑 工具使用 Hackbar的tips java下載配置 Xray下載配置&使用 burp爆破賬號密碼和C段&注意事項 SqlMap爆破&創建…

Unity Miscellaneous入門

概述 在Unity中有非常多好用的組件,也是Unity為我們提供的方便的開發工具,它的功能可能不是主流的內容,比如渲染,音樂,視頻等等,所有Unity把這些內容統一歸到了一個雜項文件組中。 Unity組件入門篇總目錄-…

Python線程

Python線程 1. 進程和線程 先來了解下進程和線程。 類比: 一個工廠,至少有一個車間,一個車間中至少有一個工人,最終是工人在工作。 一個程序,至少有一個進程,一個進程中至少有一個線程,最終…

langchain實戰-從0到1搭建ai聊天機器人

介紹 當前,人工智能大模型公司如雨后春筍般迅速涌現,例如 OpenAI、文心一言、通義千問等,它們提供了成熟的 API 調用服務。然而,隨之而來的是不同公司的繁瑣協議接入過程,這讓許多開發者感到頭疼不已。有沒有一種統一…

SpringBoot + Redis實現對接口的限流

目錄 前言 什么是限流? 實現限流 創建一個注解類 接著創建一個切面類 前言 在項目中,對于接口的限流,是任何項目都必不可少的一部分,主要是為了防止用戶頻繁的發送請求,對服務器造成壓力。 另外一點就是防止外來攻…

C++之第八課

課程列表 今天我們來學一學C里的一些實用的東西。 1.域寬 說到域寬setw&#xff0c;就叒要加頭文件了。 #include<iomanip> 使用格式是&#xff1a; cout<<setw(5)<<"123"; setw括號里面可以改數字&#xff0c;后面就是輸出內容了&#xff…

COD論文筆記 Boundary-Guided Camouflaged Object Detection

動機 挑戰性任務&#xff1a;偽裝物體檢測&#xff08;COD&#xff09;是一個重要且具有挑戰性的任務&#xff0c;因為偽裝物體往往與背景高度相似&#xff0c;使得準確識別和分割非常困難。現有方法的不足&#xff1a;現有的深度學習方法難以有效識別偽裝物體的結構和細節&am…

MySQL索引、視圖練習

素材 1.學生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 學號&#xff0c;姓名&#xff0c;性別&#xff0c;年齡&#xff0c;所在系 Sno為主鍵 2.課程表&#xff1a;Course (Cno, Cname,) 課程號&#xff0c;課程名 Cno為主鍵 3.學生選課表&#xff1a;SC (Sno…

Home Credit - Credit Risk Model Stability

本篇是對Kaggle上Home Credit - Credit Risk Model Stability競賽中的開源代碼VotingClassifier Home Credit的解讀。原鏈接在VotingClassifier Home Credit (kaggle.com)。 %%writefile script.py import sys from pathlib import Path import subprocess import os import g…

人工智能的發展現狀,AI將如何改變IT行業,哪些職業將最先失業

文章目錄 一、人工智能的發展現狀1、技術進展與突破2、商業應用與市場3、挑戰與問題4、未來趨勢 二、AI將如何改變IT行業1、工作方式的轉變&#xff1a;2、未來發展的推動&#xff1a;3、用戶服務和體驗的提升&#xff1a;4、創新和轉型的推動&#xff1a;5、融入日常生活和工作…

淺談JMeter運行原理

淺談JMeter運行原理 JMeter架構基礎 JMeter基于Java平臺開發&#xff0c;運行于Java虛擬機&#xff08;JVM&#xff09;之上。這意味著它可以在任何支持JVM的操作系統上運行&#xff0c;包括Windows、Linux、macOS等。其核心架構設計圍繞著多線程執行機制&#xff0c;這使得它…

AI大模型探索之路-實戰篇6: Function Calling技術調研之詳細流程剖析

系列篇章&#x1f4a5; AI大模型探索之路-實戰篇4&#xff1a;DB-GPT數據應用開發框架調研實踐 AI大模型探索之路-實戰篇5&#xff1a; Open Interpreter開放代碼解釋器調研實踐 目錄 系列篇章&#x1f4a5;一、前言二、Function Calling詳細流程剖析1、創建OpenAI客戶端2、定…

PCL 法向量加權的RANSAC擬合分割平面

目錄 一、算法原理1、原理概述2、主要函數二、代碼實現三、結果展示四、相關鏈接本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 一、算法原理 1、原理概述

鴻蒙布局List簡介

鴻蒙布局List簡介 List--常見的布局容器List 創建方式創建方式一&#xff0c;通過Listitem創建方式二&#xff0c;通過ForEach和Listitem創建方式三&#xff0c;通過ListItemGroup List–常見的布局容器 List是在app開發中最常見的一種布局方式&#xff0c;例如通訊錄、新聞列…

Wpf 使用 Prism 實戰開發Day24

自定義詢問窗口 當需要關閉系統或進行刪除數據或進行其他操作的時候&#xff0c;需要詢問用戶是否要執行對應的操作。那么就需要一個彈窗來給用戶進行提示。 一.添加自定義詢問窗口視圖 (MsgView.xaml) 1.首先&#xff0c;添加一個自定義詢問窗口視圖 (MsgView.xaml) <Use…

域內攻擊 ----->約束非約束委派攻擊

在域中&#xff0c;除了我們常見的橫向移動以外&#xff0c;還有很多攻擊&#xff0c;像什么kerberoasting&#xff0c;委派攻擊&#xff0c;NTLMrelay啊...... 還有很多&#xff08;暫時只知道這些&#xff09; 以前在一篇公眾號看到的一個笑話也薈萃了網安的一些攻擊手法&am…

vscode終端運行pnpm,yarn不成功問題

vscode終端運行pnpm&#xff0c;yarn不成功問題 1.問題描述2.解決辦法 1.問題描述 全局安裝了pnpm后&#xff0c;cmd窗口執行pnpm -v可以查看版本信息&#xff0c;在項目目錄可以執行操作&#xff0c;但是在vscode中無法執行并報錯 2.解決辦法 以管理員身份運行vscode打開vscod…