Python 文件操作大全
打開(kāi)文件
在讀寫(xiě)文件前需要先打開(kāi)文件
用 open 打開(kāi)一個(gè)文件
f = open('d:/MyComputer/text.txt','r')
print(f)
print(type(f))
"""
運(yùn)行結(jié)果
<_io.TextIOWrapper name='d:/My Computer/text.txt' mode='r' encoding='cp936'>
<class '_io.TextIOWrapper'>
"""- 前面一個(gè)參數(shù)是指:需要打開(kāi)哪個(gè)文件
- 后面一個(gè)參數(shù)是指:打開(kāi)方式
r:read,按照讀方式打開(kāi)w:write,按照寫(xiě)方式打開(kāi)a:append,按照寫(xiě)方式打開(kāi),把內(nèi)容寫(xiě)到原有文件內(nèi)容的末尾
open的返回值是一個(gè)文件對(duì)象,f相當(dāng)于是file的縮寫(xiě)
- 文件的內(nèi)容,是在硬盤(pán)上的
- 此處的文件對(duì)象,則是內(nèi)存上的一個(gè)變量
- 后續(xù)讀寫(xiě)文件操作,都是拿著這個(gè)文件對(duì)象來(lái)進(jìn)行操作的
此處的文件對(duì)象就像一個(gè)“遙控器”一樣,計(jì)算機(jī)中,也把這樣的遠(yuǎn)程操控的“遙控器”稱為“句柄”(handler)
關(guān)閉文件
文件在打開(kāi)完之后,使用完之后,一定要關(guān)閉!
打開(kāi)文件,其實(shí)是在申請(qǐng)一定的系統(tǒng)資源。不再使用文件的時(shí)候,資源就應(yīng)該及時(shí)釋放
否則就可能造成文件資源泄露,進(jìn)一步導(dǎo)致其他部分的代碼無(wú)法順利打開(kāi)文件了
正是因?yàn)橐粋€(gè)系統(tǒng)的資源是有限的,因此一個(gè)程序能打開(kāi)的文件個(gè)數(shù)也是有上限的
f.close()
文件打開(kāi)的上限
# 文件打開(kāi)的上限
FIle = []
count = 0
while True:
f = open('d:/My Computer/text.txt')
first.append(f)
count += 1
print(f'打開(kāi)文件的個(gè)數(shù):{count}')
- 在系統(tǒng)中,可以通過(guò)一些設(shè)置項(xiàng),來(lái)配置能打開(kāi)文件的最大數(shù)目
- 但無(wú)論配置多少,都不是無(wú)窮無(wú)盡的,所以需要記得及時(shí)關(guān)閉文件,釋放資源
- 這里將文件對(duì)象放入數(shù)組
File中,是為了避免產(chǎn)生垃圾回收- 垃圾回收(
GC)是Python的一個(gè)重要機(jī)制,自動(dòng)把不用的變量給釋放掉 - 如果不將每次打開(kāi)的文件對(duì)象放入
FIle中,那么前面打開(kāi)的文件對(duì)象就會(huì)由于沒(méi)有使用而被自動(dòng)釋放,最后導(dǎo)致文件在不關(guān)閉的情況下可以一直打開(kāi)
- 垃圾回收(
寫(xiě)文件
使用 r 方式打開(kāi)文件
# 使用 read 方式打開(kāi)文件,再進(jìn)行寫(xiě)操作
f = open('d:/My Computer/text.txt','r')
f.write('hello')
f.close()
文件會(huì)拋出異常

使用 w 的方式打開(kāi)文件
# 使用 write 來(lái)實(shí)現(xiàn)寫(xiě)文件的操作
# 使用 read 方式打開(kāi)文件,再進(jìn)行寫(xiě)操作
f = open('d:/My Computer/text.txt','w')
f.write('hello')
f.close()
f = open('d:/My Computer/text.txt','w')
f.write('world')
f.close()
- 最后所打開(kāi)的文件中寫(xiě)入了‘
world’ - 如果使用
w打開(kāi)文件之后,會(huì)清空原文件中的內(nèi)容,再進(jìn)行后續(xù)寫(xiě)操作
使用 a 的方式打開(kāi)文件
# 使用 read 方式打開(kāi)文件,再進(jìn)行寫(xiě)操作
f = open('d:/My Computer/text.txt','w')
f.write('hello')
f.close()
f = open('d:/My Computer/text.txt','a')
f.write('world')
f.close()此時(shí)原有內(nèi)容不變,寫(xiě)入的內(nèi)容會(huì)存在于之前文件內(nèi)容的末尾(追加寫(xiě))

讀文件
中文和英文類似,在計(jì)算機(jī)中,都是使用“數(shù)字”來(lái)表示字符的。但具體是那個(gè)數(shù)字對(duì)應(yīng)哪個(gè)漢字是有多個(gè)版本的,主流的是:
GBKUTF8
在實(shí)際開(kāi)發(fā)的時(shí)候,就需要保證,文件內(nèi)容的編碼方式和代碼中操作文件的編碼方式是匹配的,所以需要再打開(kāi)文件的時(shí)候指定編碼方式
按字符數(shù)量讀取

# 按字符數(shù)量來(lái)讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
result = f.read(5)
print(result)
f.close()
"""
運(yùn)行結(jié)果
床前明月光
"""按行來(lái)讀取
最簡(jiǎn)單的方法,就是直接使用 for 循環(huán)
# 按行讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
for line in f:
print(f'line = {line}')
f.close()
"""
運(yùn)行結(jié)果
line = 床前明月光
line = 疑是地上霜
line = 舉頭望明月
line = 低頭思故鄉(xiāng)
"""- 之所以多了空行,是因?yàn)楸緛?lái)讀取到的文件內(nèi)容(這一行內(nèi)容,末尾就帶有
\n) - 此處使用
print打印,又會(huì)自動(dòng)添加換行的行為 - 可以給
print再多設(shè)定個(gè)參數(shù),修改print的自動(dòng)換行行為
# 按行讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
for line in f:
print(f'line = {line}', end = '')
f.close()
"""
運(yùn)行結(jié)果
line = 床前明月光
line = 疑是地上霜
line = 舉頭望明月
line = 低頭思故鄉(xiāng)
"""end參數(shù)就是表示每次打印之后要在末尾加個(gè)啥- 默認(rèn)是
\n - 修改成‘ ’,也就是什么都不加
- 默認(rèn)是
直接讀取全部?jī)?nèi)容
使用 readlines 的方法,直接把整個(gè)文件所有的內(nèi)容都讀出來(lái),并且按照行組織到一個(gè)列表中
# 直接讀完所有內(nèi)容,并且按行進(jìn)行組織
f = open('d:/My Computer/text.txt', 'r', encoding='utf8')
lines = f.readlines()
print(lines)
f.close()
"""
運(yùn)行結(jié)果
['床前明月光\n', '疑是地上霜\n', '舉頭望明月\n', '低頭思故鄉(xiāng)']
"""- 一次全部讀完更省時(shí)間
上下文管理器
打開(kāi)文件之后, 是容易忘記關(guān)閉的,Python 提供了上下文管理器,來(lái)幫助程序猿自動(dòng)關(guān)閉文件
- 使用
with語(yǔ)句打開(kāi)文件 - 當(dāng)
with內(nèi)部的代碼塊執(zhí)行完畢后,就會(huì)自動(dòng)調(diào)用關(guān)閉方法
with open('d:/My Computer/text.txt','r',encoding='utf8') as f:
# 進(jìn)行文件處理的邏輯
- 上下文管理器起到的效果
- 當(dāng)
with對(duì)應(yīng)的代碼塊執(zhí)行結(jié)束后,就會(huì)自動(dòng)執(zhí)行f的close - 將
close委托給了with來(lái)執(zhí)行,就不用擔(dān)心自己忘記close了
- 當(dāng)
到此這篇關(guān)于Python 文件操作大全的文章就介紹到這了,更多相關(guān)Python 文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)連通域標(biāo)記算法
如果把圖像分為前景和背景兩部分,那么連通域就是連通在一起的前景,這種關(guān)系對(duì)于二值圖像來(lái)說(shuō)比較明顯,下面我們就來(lái)了解一下連通域標(biāo)記算法原理及其Python實(shí)現(xiàn)吧2023-12-12
python使用selenium操作瀏覽器的實(shí)現(xiàn)示例
Selenium是一個(gè)模擬瀏覽器瀏覽網(wǎng)頁(yè)的工具,主要用于測(cè)試網(wǎng)站的自動(dòng)化測(cè)試工具,本文主要介紹了python使用selenium操作瀏覽器的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Python 中如何使用 virtualenv 管理虛擬環(huán)境
這篇文章主要介紹了Python 中使用 virtualenv 管理虛擬環(huán)境的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01

