文件
1. 什么是文件?
我們平時(shí)所創(chuàng)建的變量都是保存在內(nèi)存中的,我們知道如果重啟應(yīng)用或者重啟機(jī)器,內(nèi)存中的數(shù)據(jù)就會(huì)丟失。
如果想讓數(shù)據(jù)能夠持久化存儲(chǔ),就可以把數(shù)據(jù)保存到文件或者是數(shù)據(jù)庫(kù)中。
比如windows上,通過后綴名可以看到常見的文件類型有:
- 可執(zhí)行文件(exe)
- 文本文件(txt)
- 圖片文件(jpg、png)
- office文件 (.ppt、.xlsx)
2. 文件路徑
一個(gè)機(jī)器上,會(huì)存在很多文件,為了讓這些文件更方便的管理和組織,往往會(huì)使用很多的“文件夾”,也就是我們平常所說(shuō)的目錄
為了更家準(zhǔn)確的確定一個(gè)文件的位置,就可以使用文件路徑
D:\root\PyCharm Community Edition 2022.1\bin\pycharm64.exe
這就是PyCharm軟件的絕對(duì)路徑
- D:表示的是盤符,不區(qū)分大小寫
- 每一個(gè)
\
表示一級(jí)目錄 - 在 windows中目錄之間的分割符,可以用
/
也可以用\
- 這里是是介紹來(lái)了絕對(duì)路徑,和它對(duì)應(yīng)的是相對(duì)路徑,用
../
來(lái)表示上一級(jí)路徑,./
表示當(dāng)前路徑
3. 文件操作
要想使用文件,主要是通過文件來(lái)保存數(shù)據(jù),在需要的時(shí)候把保存的數(shù)據(jù)讀取出來(lái)
但是想要讀寫文件,需要先打開文件,讀寫完畢之后一定要記得關(guān)閉文件,防止文件資源泄露
1) 打開文件
使用內(nèi)置函數(shù)open
打開文件
file = open('D:/root/test.txt', 'r')
print(type(file))
# 運(yùn)行結(jié)果
<class '_io.TextIOWrapper'>
- 第一個(gè)參數(shù)是字符串,表示要打開文件路徑
- 第二個(gè)參數(shù)也是一個(gè)字符串,表示文件打開的方式,其中
r
表示只讀,w
表示按照寫方式打開,a
表示追加的方式打開 - 如果文件打開成功,就會(huì)返回一個(gè)文件對(duì)象,后續(xù)的讀寫文件操作都是圍繞著這個(gè)文件對(duì)象操作
- 如果打開文件敗(比如路徑寫錯(cuò)了或者文件壓根不存在),就會(huì)拋出異常
2) 關(guān)閉文件
是用文件對(duì)象.close方法關(guān)閉已經(jīng)打開的文件
file = open('D:/root/test.txt', 'r')
file.close()
使用完一個(gè)文件一定要記得及時(shí)關(guān)閉
一個(gè)程序同時(shí)打開的文件個(gè)數(shù)是存在上限的!
my_list = []
count = 0
while True:
file = open('D:/root/test.txt', 'r')
my_list.append(file)
count += 1
print(f'file{count}')
如果一直循環(huán)打開文件不關(guān)閉的話,達(dá)到一定數(shù)量就會(huì)拋出異常
注意:上面的每個(gè)文件對(duì)象都用列表保存起來(lái)了,如果不保存就不會(huì)拋出異常,因?yàn)镻ython內(nèi)置的垃圾回收機(jī)制,會(huì)在文件對(duì)象銷毀的時(shí)候自動(dòng)關(guān)閉所有文件
但是垃圾回收機(jī)制不一定及時(shí),所以寫代碼不要依賴?yán)厥諜C(jī)制
3) 寫文件
- 如果要寫文件,就要以寫的方式打開,把第二個(gè)參數(shù)設(shè)置為
w
- 使用
write
方法寫數(shù)據(jù)
file = open('D:/root/test.txt', 'w')
file.write('hello world')
file.close()
用記事本打開test.txt文件就能查看被寫進(jìn)去的數(shù)據(jù)
- 如果使用
r
方式打開文件,則寫入時(shí)就會(huì)拋出異常 - 使用
w
一旦打開文件 成功,就會(huì)清空文件原有的數(shù)據(jù) - 使用
a
實(shí)現(xiàn)“追加寫入”,此時(shí)原有內(nèi)容不變,寫入的額內(nèi)容會(huì)存在于之前文件內(nèi)容的末尾
file = open('D:/root/test.txt', 'w')
file.write('hello world')
file.close()
file = open('D:/root/test.txt', 'a')
file.write('\n你好世界')
file.close()
- 針對(duì)已經(jīng)關(guān)閉 的文件對(duì)象進(jìn)行寫操作也會(huì)拋出異常
4) 讀文件
- 讀文件需要使用
r
的方式打開文件 - 使用
read
方法完成操作,參數(shù)表示讀取幾個(gè)字符,不填參數(shù)則是默認(rèn)讀取整個(gè)文件
file = open('D:/root/test.txt', 'r')
tmp = file.read(5)
print(tmp)
- 如果讀取文件的時(shí)候遇到編碼方式報(bào)錯(cuò),可以手動(dòng)指定的讀取文件的編碼方式
file = open('D:/root/test.txt', 'r', encoding='utf8')
tmp = file.read()
print(tmp)
- 如果是多行文本,可以使用for循環(huán)一次讀取一行
file = open('D:/root/test.txt', 'r', encoding='utf8')
count = 1
for tmp in file:
print(f'第{count}行:{tmp}', end='')
count += 1
file.close()
- 使用
readlines
直接把整個(gè)文件內(nèi)容讀取出來(lái),返回一個(gè)列表,每個(gè)元素為一行
file = open('D:/root/test.txt', 'r', encoding='utf8')
lists = file.readlines()
print(lists)
print(type(lists))
file.close()
# 運(yùn)行結(jié)果
['hello world\n', '你好世界\n', '測(cè)試\n', '文件\n', '讀寫\n', '\n', '上面是空行']
<class 'list'>
4. 使用上下文管理器
當(dāng)打開文件之后,有的時(shí)候老是忘記關(guān)閉文件對(duì)象,于是Python提供了上下文管理器,來(lái)幫助程序員自動(dòng)關(guān)閉文件(類似于Java的try)
- 使用
with
語(yǔ)句打開文件 - 當(dāng)
with
內(nèi)部的代碼塊執(zhí)行完畢后, 就會(huì)自動(dòng)調(diào)用關(guān)閉方法
with open('D:/root/test.txt', 'r', encoding='utf8') as file:
lines = file.readline()
print(lines)
上下文管理器起到的效果就是一個(gè)監(jiān)控,當(dāng) with對(duì)應(yīng)的代碼塊執(zhí)行完畢后,就會(huì)自動(dòng)執(zhí)行 文件對(duì)象的 close方法文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-428064.html
5. 實(shí)現(xiàn)文件查找工具
指定一個(gè)待搜索的文件路徑,同時(shí)指定一個(gè)要搜索的文件關(guān)鍵字
在待搜索路徑中查找是否文件名中包含這個(gè)關(guān)鍵字文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-428064.html
- 使用
os.walk
即可實(shí)現(xiàn)目錄的遞歸遍歷,不需要手動(dòng)寫遞歸 -
os.walk
返回一個(gè)三元組, 分別是 當(dāng)前路徑 , **當(dāng)前路徑下包含的目錄名 **(多個(gè)), 當(dāng)前路徑下包含的文件名 (多個(gè))
import os
path = input('請(qǐng)輸入要搜索的絕對(duì)路徑:')
keyword = input('請(qǐng)輸入要查找的文件名的關(guān)鍵字:')
'''
dir_path:遍歷到當(dāng)前位置的絕對(duì)路徑啥
dir_names:當(dāng)前路徑下都有哪些目錄
file_names:當(dāng)前目錄下都有哪些文件(保存的是文件命名)
'''
for dir_path, dir_names, file_names in os.walk(path):
for f_name in file_names:
if keyword in f_name:
print(f'{dir_path}/{f_name}')
到了這里,關(guān)于Python基礎(chǔ)語(yǔ)法(五)—— 文件基本操作(打開、寫入、關(guān)閉、查找)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!