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

帶你一文搞懂Python文件的讀寫(xiě)操作

 更新時(shí)間:2023年05月16日 09:50:42   作者:江帥帥  
讀寫(xiě)文件是最常見(jiàn)的IO操作,Python內(nèi)置了讀寫(xiě)文件的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python文件讀寫(xiě)操作的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、Python 文件讀寫(xiě)概述

Python 在文件讀寫(xiě)操作中,會(huì)使用「內(nèi)置函數(shù)」和「Pandas 庫(kù)」兩種方式。

先來(lái)看內(nèi)置函數(shù),包括 open()、read()、readline()、readlines()、write()、writelines()、close() 等方法,也是接下來(lái)給大家詳細(xì)介紹的內(nèi)容。

再看 Pandas 庫(kù),包括 read_csv()、to_csv()、read_excel()、to_excel()、read_json()、to_json() 等方法,我們后面講到 Pandas 庫(kù)的時(shí)候,再詳細(xì)講講。

在使用「內(nèi)置函數(shù)」的時(shí)候,思路基本上是:

1、打開(kāi)文件

2、開(kāi)始「讀」或者「寫(xiě)」的操作

3、關(guān)閉文件

二、使用 open() 打開(kāi)文件

Python 使用 open() 方法,可以根據(jù)指定文件名或標(biāo)識(shí)符來(lái)打開(kāi)文件。

語(yǔ)法格式:

file = open('filename.txt', mode = 'r')

獲取到的 file 是一個(gè)文件對(duì)象。

Python 文件的打開(kāi)模式,有如下幾種,且可以組合使用:

模式描述
‘r’以「只讀」模式打開(kāi)文件,如果指定文件不存在,則會(huì)報(bào)錯(cuò),默認(rèn)情況下文件指針指向文件開(kāi)頭
‘w’以「只寫(xiě)」模式打開(kāi)文件,如果文件不存在,則根據(jù) filename 創(chuàng)建相應(yīng)的文件,如果文件已存在,則會(huì)覆蓋原文件
‘a’以「追加」模式打開(kāi)文件,如果文件已存在,文件指針會(huì)指向文件尾部,將內(nèi)容追加在原文件后面,如果文件不存在,則會(huì)新建文件且寫(xiě)入內(nèi)容
‘t’以「文本文件」模式打開(kāi)文件
‘b’以「二進(jìn)制」模式打開(kāi)文件,主要用于打開(kāi)圖片、音頻等非文本文件
‘+’打開(kāi)文件并允許更新(可讀可寫(xiě)),也就是說(shuō),使用參數(shù) w+、a+ 也是可以讀入文件的,在使用的時(shí)候,需要注意區(qū)別

再告訴你一個(gè)秘密,我們?cè)诓僮魑募臅r(shí)候,因?yàn)閮?nèi)容很多,所以我們前面學(xué)到的「循環(huán)」終于可以大派用場(chǎng)了,比如「for 循環(huán)」就會(huì)經(jīng)常被使用到。

案例代碼:

第一步,新建 hello.txt 文件,如下:

當(dāng)你慢慢調(diào)整了自己看待問(wèn)題的角度,
也提升了思考的深度,你竟然會(huì)發(fā)現(xiàn),
你所處在的「超一線(xiàn)城市」其實(shí)是一個(gè)「場(chǎng)」。
在這個(gè)場(chǎng)域里頭,你可以遇見(jiàn)無(wú)限的可能性,
每一個(gè)維度都暗含大藍(lán)海,都有大把的機(jī)會(huì),
你甚至運(yùn)氣爆棚,在某次從天而降的大機(jī)遇中,
能迅速成長(zhǎng)為自己可能完全沒(méi)法想象的人。

第二步,使用 for 循環(huán)讀取文件,如下:

# 打開(kāi) hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')

# 使用 for 循環(huán),將讀到的內(nèi)容,打印出來(lái)
num = 1
for con in hello:
    print('第 %d 行:' % num, con)
    num += 1

# 最后需要將文件關(guān)閉
hello.close()

第三步,改良,使用 read() 方法讀取

# 打開(kāi) hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')

# 使用 read()
con = hello.read()

# 打印
print(con)

# 最后需要將文件關(guān)閉
hello.close()

拓展:

如果,我將上面的第二步和第三步,放在同一個(gè)文件中寫(xiě),就會(huì)出現(xiàn)「文本文件指針復(fù)位」的問(wèn)題。

因?yàn)槲覀兺ㄟ^(guò) for 循環(huán),已經(jīng)讓「文本文件指針」從文件的開(kāi)頭讀到文本末尾,已經(jīng)把所有內(nèi)容讀取,此時(shí)指針在文末位置。

如果說(shuō),再讓程序執(zhí)行 read() 方法,則會(huì)發(fā)現(xiàn)后面已經(jīng)沒(méi)有內(nèi)容可讀了,所以程序執(zhí)行后,不會(huì)輸出任何內(nèi)容。

解決辦法,調(diào)用 seek() 方法,指定偏移量為 0,來(lái)將文本文件指針「復(fù)位」即可。

你還可以通過(guò) tell() 方法,獲取文件指針的當(dāng)前位置。如果此時(shí)文件指針在文末位置,獲取到的其實(shí)就是整個(gè)文本的字節(jié)數(shù),也相當(dāng)是這個(gè)文件的大小了。

# 打開(kāi) hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')

# 使用 for 循環(huán),將讀到的內(nèi)容,打印出來(lái)
num = 1
for con in hello:
    print('第 %d 行:' % num, con)
    num += 1

# 獲取文件指針的位置
print(hello.tell())
    
# 將文本文件的指針,復(fù)位
hello.seek(0)

# 使用 read()
con = hello.read()
print("---- 使用 read() -----")

print(con)

# 最后需要將文件關(guān)閉
hello.close()

三、使用 read()、readline()、readlines() 讀取數(shù)據(jù)

當(dāng)文件很大的時(shí)候,單純使用 read() 方法就很難一次性讀入內(nèi)存中。

可以使用 readline() 方法,從文中讀取整行信息。

案例代碼:

# 打開(kāi) hello.txt 文件,指定「只讀模式」
hello = open('hello.txt', 'r')

# 使用 readline(),讀取一行信息
con = hello.readline()
print(con)

# 最后需要將文件關(guān)閉
hello.close()

但如果想讀取所有行的信息,就需要使用 readlines() 方法了

readlines() 和 read() 的區(qū)別,在于讀取的「顆粒大小」,前者顆粒較大以行為單位,后者顆粒較小以字節(jié)為單位。

案例代碼:

try:
    # 打開(kāi) hello.txt 文件,指定「只讀模式」
    hello = open('helo.txt', 'r')

    # 使用 readlines(),讀取全部信息
    con = hello.readlines()
    print(con)

finally:
    print('出問(wèn)題了')
    # 最后需要將文件關(guān)閉
    hello.close()

另外,提醒一下,讀寫(xiě)文件的時(shí)候,經(jīng)常會(huì)出現(xiàn)一些 IOError 錯(cuò)誤異常,建議寫(xiě)在 try…finally… 異常捕獲塊中,養(yǎng)成良好的編碼習(xí)慣。

比如,我們經(jīng)常執(zhí)行到最后,會(huì)忘記關(guān)閉文件,這就很可能會(huì)帶來(lái)很多潛在的問(wèn)題,可以在 finally 中,也就是程序最后會(huì)執(zhí)行的部分,去關(guān)閉我們已打開(kāi)的文件。

案例代碼:

try:
    # 打開(kāi) hello.txt 文件,指定「只讀模式」
    hello = open('helo.txt', 'r')

    # 使用 readlines(),讀取全部信息
    con = hello.readlines()
    print(con)

finally:
    print('出問(wèn)題了')
    # 最后需要將文件關(guān)閉
    hello.close()

四、使用 write()、writelines() 寫(xiě)入文件

還有一種更好玩兒,可以用 with…as… 語(yǔ)句,它天生用來(lái)防止我們忘記關(guān)閉文件。

當(dāng)你引入 with 語(yǔ)句,它會(huì)在你訪問(wèn)完文件之后,根據(jù)上下文自動(dòng)調(diào)用 close() 方法來(lái)關(guān)閉。

語(yǔ)法格式:

with expression as target :
    statements

案例代碼:

with open('hello.txt') as hello :
    hello.write("I Love You")

在上面的代碼中,我們?cè)诖蜷_(kāi)文件的時(shí)候,指定了 ‘w’ 模式,啟動(dòng)了寫(xiě)的操作。而且還使用了一個(gè) write() 方法,它是用來(lái)向文件中寫(xiě)入指定字符串的。

在代碼中操作的字符串內(nèi)容,主要存儲(chǔ)在緩沖區(qū),我們?cè)谖募P(guān)閉前或緩沖區(qū)刷新前,可以將它寫(xiě)入文件。

最后,用一下 writelines() 方法,將列表中的三行數(shù)據(jù),寫(xiě)到文件中。

案例代碼:

# 創(chuàng)建一個(gè)列表
txtlist = ['Python 私教\n', 'Java 私教\n', 'C++ 私教\n']

# 寫(xiě)入文件
with open('hello.txt') as hello :
    hello.writelines(txtlist)

補(bǔ)充:文件迭代器

Python可是大名鼎鼎的Python,不來(lái)點(diǎn)niubility的操作那還叫Python嗎?

Python中,文件對(duì)象是可迭代的,意味著可以直接在for循環(huán)中使用文件對(duì)象,從而進(jìn)行迭代文件的內(nèi)容。下面兩個(gè)demo都是行得通的:

f = open(filename)
for line in f:
    #文件操作
f.close()
1
2
3
4
for line in open(filename):
    #文件操作

最后

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

相關(guān)文章

  • python使用str & repr轉(zhuǎn)換字符串

    python使用str & repr轉(zhuǎn)換字符串

    str() 是將 數(shù)值 轉(zhuǎn)成字符串 repr() 是將一個(gè)對(duì)象 轉(zhuǎn)成字符串 顯示 看明白了么:str()是將一個(gè)對(duì)象轉(zhuǎn)化成str對(duì)象 repr()是將一個(gè)對(duì)象可視化,使用字符串輸出,使編程人員看到其的內(nèi)部結(jié)構(gòu)
    2016-10-10
  • python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法

    python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法

    這篇文章主要介紹了python實(shí)現(xiàn)打印類(lèi)的所有屬性和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Django ContentType組件詳解

    Django ContentType組件詳解

    這篇文章主要為大家介紹了Django ContentType組件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 基于梯度爆炸的解決方法:clip gradient

    基于梯度爆炸的解決方法:clip gradient

    今天小編就為大家分享一篇基于梯度爆炸的解決方法:clip gradient,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試

    用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試

    這篇文章主要介紹了用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 對(duì)Django中內(nèi)置的User模型實(shí)例詳解

    對(duì)Django中內(nèi)置的User模型實(shí)例詳解

    今天小編就為大家分享一篇對(duì)Django中內(nèi)置的User模型實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • pytorch實(shí)現(xiàn)線(xiàn)性回歸

    pytorch實(shí)現(xiàn)線(xiàn)性回歸

    這篇文章主要為大家詳細(xì)介紹了pytorch實(shí)現(xiàn)線(xiàn)性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Django 多語(yǔ)言教程的實(shí)現(xiàn)(i18n)

    Django 多語(yǔ)言教程的實(shí)現(xiàn)(i18n)

    這篇文章主要介紹了Django 多語(yǔ)言教程的實(shí)現(xiàn)(i18n),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python?encode()方法和decode()方法詳解

    Python?encode()方法和decode()方法詳解

    encode() 方法為字符串類(lèi)型(str)提供的方法,用于將 str 類(lèi)型轉(zhuǎn)換成 bytes 類(lèi)型,這個(gè)過(guò)程也稱(chēng)為“編碼”,這篇文章主要介紹了Python?encode()方法和decode()方法,需要的朋友可以參考下
    2022-12-12
  • pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練

    pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練

    今天小編就為大家分享一篇pytorch實(shí)現(xiàn)對(duì)輸入超過(guò)三通道的數(shù)據(jù)進(jìn)行訓(xùn)練,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論