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

通過(guò)實(shí)例解析Python文件操作實(shí)現(xiàn)步驟

 更新時(shí)間:2020年09月21日 10:41:53   作者:小名叫小明  
這篇文章主要介紹了通過(guò)實(shí)例解析Python文件操作實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

當(dāng)程序運(yùn)行時(shí),變量是保存數(shù)據(jù)的好方法,但變量、序列以及對(duì)象中存儲(chǔ)的數(shù)據(jù)是暫時(shí)的,程序結(jié)束后就會(huì)丟失,如果希望程序結(jié)束后數(shù)據(jù)仍然保持,就需要將數(shù)據(jù)保存到文件中。

Python 提供了內(nèi)置的文件對(duì)象,以及對(duì)文件、目錄進(jìn)行操作的內(nèi)置模塊,通過(guò)這些技術(shù)可以很方便地將數(shù)據(jù)保存到文件(如文本文件等)中。

一、文件的概念

在計(jì)算機(jī)中,文件是以二進(jìn)制的方式保存在磁盤(pán)上的。

文件分為文本文件和二進(jìn)制文件。

1、文本文件

可以使用文本編輯軟件查看,本質(zhì)上還是二進(jìn)制文件,例如:python 的源程序。

2、二進(jìn)制文件

保存的內(nèi)容不是給人直接閱讀的,而是提供給其他軟件使用的。例如:圖片文件、音頻文件、視頻文件等等,二進(jìn)制文件不能使用文本編輯軟件查看。

Python 中,對(duì)文件的操作有很多種,常見(jiàn)的操作包括創(chuàng)建、刪除、修改權(quán)限、讀取、寫(xiě)入等,這些操作可大致分為以下 2 類:

刪除、修改權(quán)限:作用于文件本身,屬于系統(tǒng)級(jí)操作。
寫(xiě)入、讀?。菏俏募畛S玫牟僮鳎饔糜谖募膬?nèi)容,屬于應(yīng)用級(jí)操作。

二、文件的基本操作

1、操作文件的步驟

文件的應(yīng)用級(jí)操作可以分為以下 3 步,每一步都需要借助對(duì)應(yīng)的函數(shù)實(shí)現(xiàn):

打開(kāi)文件:使用 open() 函數(shù),該函數(shù)會(huì)返回一個(gè)文件對(duì)象;

對(duì)已打開(kāi)文件做讀/寫(xiě)操作:讀取文件內(nèi)容可使用 read()、readline() 以及 readlines() 函數(shù);向文件中寫(xiě)入內(nèi)容,可以使用 write() 函數(shù)。

關(guān)閉文件:完成對(duì)文件的讀/寫(xiě)操作之后,最后需要關(guān)閉文件,可以使用 close() 函數(shù)。

2、打開(kāi)文件的方式

在 Python 中,如果想要操作文件,首先需要?jiǎng)?chuàng)建或者打開(kāi)指定的文件,并創(chuàng)建一個(gè)文件對(duì)象,而這些工作可以通過(guò)內(nèi)置的 open() 函數(shù)實(shí)現(xiàn)。

語(yǔ)法如下:

  • file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])
  • file:表示要?jiǎng)?chuàng)建的文件對(duì)象。
  • file_name:要?jiǎng)?chuàng)建或打開(kāi)文件的文件名稱。
  • mode:用于指定文件的打開(kāi)模式。默認(rèn)以只讀(r)模式打開(kāi)文件。
  • buffering:用于指定對(duì)文件做讀寫(xiě)操作時(shí),是否使用緩沖區(qū)。
  • encoding:手動(dòng)設(shè)定打開(kāi)文件時(shí)所使用的編碼格式,不同平臺(tái)的 ecoding 參數(shù)值也不同,以 Windows 為例,其默認(rèn)為 cp936(實(shí)際上就是 GBK 編碼)。

打開(kāi)文件的常用模式

模式 說(shuō)明
r 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭,這是默認(rèn)模式。如果文件不存在,拋出異常
w 以只寫(xiě)方式打開(kāi)文件。如果文件存在會(huì)被覆蓋。如果文件不存在,創(chuàng)建新文件
a 以追加方式打開(kāi)文件。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入
r+ 以讀寫(xiě)方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。如果文件不存在,拋出異常
w+ 以讀寫(xiě)方式打開(kāi)文件。如果文件存在會(huì)被覆蓋。如果文件不存在,創(chuàng)建新文件
a+ 以讀寫(xiě)方式打開(kāi)文件。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入

文件打開(kāi)方式

open()是否需要緩沖區(qū)

通常情況下、建議大家在使用 open() 函數(shù)時(shí)打開(kāi)緩沖區(qū),即不需要修改 buffing 參數(shù)的值。

如果 buffing 參數(shù)的值為 0(或者 False),則表示在打開(kāi)指定文件時(shí)不使用緩沖區(qū);如果 buffing 參數(shù)值為大于 1 的整數(shù),該整數(shù)用于指定緩沖區(qū)的大?。▎挝皇亲止?jié));如果 buffing 參數(shù)的值為負(fù)數(shù),則代表使用默認(rèn)的緩沖區(qū)大小。

目前為止計(jì)算機(jī)內(nèi)存的 I/O 速度仍遠(yuǎn)遠(yuǎn)高于計(jì)算機(jī)外設(shè)(例如鍵盤(pán)、鼠標(biāo)、硬盤(pán)等)的 I/O 速度,如果不使用緩沖區(qū),則程序在執(zhí)行 I/O 操作時(shí),內(nèi)存和外設(shè)就必須進(jìn)行同步讀寫(xiě)操作,也就是說(shuō),內(nèi)存必須等待外設(shè)輸入(輸出)一個(gè)字節(jié)之后,才能再次輸出(輸入)一個(gè)字節(jié)。這意味著,內(nèi)存中的程序大部分時(shí)間都處于等待狀態(tài)。

而如果使用緩沖區(qū),則程序在執(zhí)行輸出操作時(shí),會(huì)先將所有數(shù)據(jù)都輸出到緩沖區(qū)中,然后繼續(xù)執(zhí)行其它操作,緩沖區(qū)中的數(shù)據(jù)會(huì)有外設(shè)自行讀取處理;同樣,當(dāng)程序執(zhí)行輸入操作時(shí),會(huì)先等外設(shè)將數(shù)據(jù)讀入緩沖區(qū)中,無(wú)需同外設(shè)做同步讀寫(xiě)操作。

3、read 方法 —— 讀取文件

read 方法可以一次性讀入并返回文件的所有內(nèi)容。

read() 函數(shù)的基本語(yǔ)法格式如下:

file.read([size])

其中,file 表示已打開(kāi)的文件對(duì)象;size 作為一個(gè)可選參數(shù),用于指定一次最多可讀取的字符(字節(jié))個(gè)數(shù),如果省略,則默認(rèn)一次性讀取所有內(nèi)容。

如果忘記關(guān)閉文件,會(huì)造成系統(tǒng)資源消耗,而且會(huì)影響到后續(xù)對(duì)文件的訪問(wèn)。

注意:read 方法執(zhí)行后,會(huì)把文件指針移動(dòng)到文件的末尾。

示例:

# 1. 打開(kāi) - 文件名需要注意大小寫(xiě)
file = open("README")

# 2. 讀取
text = file.read()
print(text)

# 3. 關(guān)閉
file.close()

在開(kāi)發(fā)中,通常會(huì)先編寫(xiě)打開(kāi)和關(guān)閉的代碼,再編寫(xiě)中間針對(duì)文件的讀/寫(xiě)操作!

4、按行讀取文件內(nèi)容

read 方法默認(rèn)會(huì)把文件的所有內(nèi)容一次性讀取到內(nèi)存。

如果文件太大,對(duì)內(nèi)存的占用會(huì)非常嚴(yán)重。

readline 方法可以一次讀取一行內(nèi)容,包含最后的換行符“\n”。方法執(zhí)行后,會(huì)把文件指針移動(dòng)到下一行,準(zhǔn)備再次讀取。

file.readline([size])

其中,file 為打開(kāi)的文件對(duì)象;size 為可選參數(shù),用于指定讀取每一行時(shí),一次最多讀取的字符(字節(jié))數(shù)。

讀取大文件的正確姿勢(shì)

# 打開(kāi)文件
file = open("README")
while True:
  # 讀取一行內(nèi)容
  text = file.readline()
  # 判斷是否讀到內(nèi)容
  if not text:
    break
  # 每讀取一行的末尾已經(jīng)有了一個(gè) `\n`
  print(text, end="")
# 關(guān)閉文件
file.close()

示例:

小文件復(fù)制

# 1. 打開(kāi)文件
file_read = open("README")
file_write = open("README[復(fù)件]", "w")

# 2. 讀取并寫(xiě)入文件
text = file_read.read()
file_write.write(text)

# 3. 關(guān)閉文件
file_read.close()
file_write.close()

大文件復(fù)制

# 1. 打開(kāi)文件
file_read = open("README")
file_write = open("README[復(fù)件]", "w")

# 2. 讀取并寫(xiě)入文件
while True:
  # 每次讀取一行
  text = file_read.readline()

  # 判斷是否讀取到內(nèi)容
  if not text:
    break

  file_write.write(text)

# 3. 關(guān)閉文件
file_read.close()
file_write.close()

對(duì)于按行來(lái)讀取文件,還有一個(gè) readlines() 函數(shù)。

readlines() 函數(shù)用于讀取文件中的所有行,它和調(diào)用不指定 size 參數(shù)的 read() 函數(shù)類似,只不過(guò)該函數(shù)返回是一個(gè)字符串列表,其中每個(gè)元素為文件中的一行內(nèi)容。

和 readline() 函數(shù)一樣,readlines() 函數(shù)在讀取每一行時(shí),會(huì)連同行尾的換行符一塊讀取。

5、文件指針

文件指針可以理解為一個(gè)標(biāo)記,它標(biāo)記從哪個(gè)位置開(kāi)始讀取數(shù)據(jù)。

第一次打開(kāi)文件時(shí),通常文件指針會(huì)指向文件的開(kāi)始位置,當(dāng)執(zhí)行了 read 方法后,文件指針默認(rèn)情況下會(huì)移動(dòng)到讀取內(nèi)容的末尾。

如果執(zhí)行了一次 read 方法,讀取了所有內(nèi)容,那么再次調(diào)用 read 方法,還能夠獲得到內(nèi)容嗎?

答案是不能,第一次讀取之后,文件指針移動(dòng)到了文件末尾,再次調(diào)用不會(huì)讀取到任何的內(nèi)容。

# 首先在 README 文件中寫(xiě)了8個(gè)1
# 1. 打開(kāi) - 文件名需要注意大小寫(xiě)
file = open("README")
# 2. 讀取
text = file.read()
print(text)
text = file.read()
print("-" * 10)
print(text)
# 3. 關(guān)閉
file.close()
#1111111
#----------
#

6、向文件中寫(xiě)入數(shù)據(jù)

Python 中的文件對(duì)象提供了 write() 函數(shù),可以向文件中寫(xiě)入指定內(nèi)容。該函數(shù)的語(yǔ)法格式如下:

file.write(string)
在寫(xiě)入文件完成后,一定要調(diào)用 close() 函數(shù)將打開(kāi)的文件關(guān)閉,否則寫(xiě)入的內(nèi)容不會(huì)保存到文件中。

這是因?yàn)?,?dāng)我們?cè)趯?xiě)入文件內(nèi)容時(shí),操作系統(tǒng)不會(huì)立刻把數(shù)據(jù)寫(xiě)入磁盤(pán),而是先緩存起來(lái),只有調(diào)用 close() 函數(shù)時(shí),操作系統(tǒng)才會(huì)保證把沒(méi)有寫(xiě)入的數(shù)據(jù)全部寫(xiě)入磁盤(pán)文件中。

寫(xiě)入文件示例:

# 打開(kāi)文件
f = open("README", "w")

f.write("hello python!\n")
f.write("今天天氣真好")

# 關(guān)閉文件
f.close()

如果向文件寫(xiě)入數(shù)據(jù)后,不想馬上關(guān)閉文件,也可以調(diào)用文件對(duì)象提供的 flush() 函數(shù),它可以實(shí)現(xiàn)將緩沖區(qū)的數(shù)據(jù)寫(xiě)入文件中。

f = open("a.txt", 'w')
f.write("寫(xiě)入一行新數(shù)據(jù)")
f.flush()

三、文件/目錄的常用管理操作

在終端 / 文件瀏覽器中可以執(zhí)行常規(guī)的文件 / 目錄管理操作,例如:創(chuàng)建、重命名、刪除、改變路徑、查看目錄內(nèi)容等等。

在 Python 中,如果希望通過(guò)程序?qū)崿F(xiàn)上述功能,需要導(dǎo)入 os 模塊。

1、文件操作

方法名 說(shuō)明 示例
rename 重命名文件 os.rename(源文件名, 目標(biāo)文件名)
remove 刪除文件 os.remove(文件名)

2、目錄操作

方法名 說(shuō)明 示例
listdir 目錄列表 os.listdir(目錄名)
mkdir 創(chuàng)建目錄 os.mkdir(目錄名)
rmdir 刪除目錄 os.rmdir(目錄名)
getcwd 獲取當(dāng)前目錄 os.getcwd()
chdir 修改工作目錄 os.chdir(目標(biāo)目錄)

文件或者目錄的操作都支持相對(duì)路徑和絕對(duì)路徑。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • PyQt5使用pyqtgraph繪制波形圖

    PyQt5使用pyqtgraph繪制波形圖

    pyqtgraph是Python平臺(tái)上一種功能強(qiáng)大的2D/3D繪圖庫(kù),相當(dāng)于matplotlib庫(kù),比它更強(qiáng)大。本文就來(lái)利用pyqtgraph實(shí)現(xiàn)繪制波形圖,需要的可以參考一下
    2023-01-01
  • python?pdb調(diào)試器及使用方法

    python?pdb調(diào)試器及使用方法

    這篇文章主要介紹了python?pdb調(diào)試器及使用方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Python中生成隨機(jī)密碼的多種超實(shí)用實(shí)例

    Python中生成隨機(jī)密碼的多種超實(shí)用實(shí)例

    隨機(jī)密碼生成器是一種常見(jiàn)的工具,用于生成強(qiáng)密碼,下面這篇文章主要給大家介紹了關(guān)于Python中生成隨機(jī)密碼的多種超實(shí)用實(shí)例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    這篇文章主要介紹了python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法,可實(shí)現(xiàn)針對(duì)文件夾及文件內(nèi)關(guān)鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • Python學(xué)習(xí)之循環(huán)方法詳解

    Python學(xué)習(xí)之循環(huán)方法詳解

    循環(huán)是有著周而復(fù)始的運(yùn)動(dòng)或變化的規(guī)律;在 Python 中,循環(huán)的操作也叫做 遍歷。與現(xiàn)實(shí)中一樣,Python 中也同樣存在著無(wú)限循環(huán)的方法與有限循環(huán)的方法。本文將通過(guò)示例詳細(xì)講解Python中的循環(huán)方法,需要的可以參考一下
    2022-03-03
  • Python 字符串換行的多種方式

    Python 字符串換行的多種方式

    本文通過(guò)四種方法給大家介紹了Python 字符串換行的方式,在文中最下面通過(guò)代碼給大家介紹了python代碼過(guò)長(zhǎng)的換行方法,需要的朋友可以參考下
    2018-09-09
  • 使用py-spy解決scrapy卡死的問(wèn)題方法

    使用py-spy解決scrapy卡死的問(wèn)題方法

    這篇文章主要介紹了使用py-spy解決scrapy卡死的問(wèn)題方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • OpenCV 邊緣檢測(cè)

    OpenCV 邊緣檢測(cè)

    OpenCV提供了許多邊緣檢測(cè)濾波函數(shù),這些濾波函數(shù)都會(huì)將非邊緣區(qū)域轉(zhuǎn)為黑色,將邊緣區(qū)域轉(zhuǎn)為白色或其他飽和的顏色。這篇文章主要介紹了OpenCV 邊緣檢測(cè),需要的朋友可以參考下
    2019-07-07
  • Python全棧之單項(xiàng)循環(huán)

    Python全棧之單項(xiàng)循環(huán)

    這篇文章主要為大家介紹了Python單項(xiàng)循環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Python之二維正態(tài)分布采樣置信橢圓繪制

    Python之二維正態(tài)分布采樣置信橢圓繪制

    這篇文章主要介紹了Python之二維正態(tài)分布采樣置信橢圓繪制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論