中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

小學(xué)Python系列少兒編程課程《第8章 永久存儲的文件》課件(共47張PPT)

資源下載
  1. 二一教育資源

小學(xué)Python系列少兒編程課程《第8章 永久存儲的文件》課件(共47張PPT)

資源簡介

(共47張PPT)
Python少兒編程
第八章 永久存儲的文件
目錄
1.1
打開和關(guān)閉文件
1.2
讀寫文件
1.3
定位文件
1.4
高大上的文件系統(tǒng)
PART 01
打開和關(guān)閉文件
打開文件
1.1
Python使用內(nèi)置函數(shù)open()即可按照指定模式打開指定文件,并創(chuàng)建文件對象,其語法格式如下。
open(filename[, mode])
其中,filename表示文件名稱;mode表示文件的讀寫模式,缺省時為只讀模式。該函數(shù)返回一個文件對象。例如,以只讀模式打開一個名為“1.txt”的文件,可以用下面代碼實現(xiàn)。
file = open('1.txt')
其中,file為打開的文件對象,通過它可以對文件進(jìn)行讀寫操作。
如果想要寫入文件,就需要在打開文件時指明文件的打開模式。Python中文件的打開模式有多種,具體表示方式如表8-1所示。
打開文件
1.1
表8-1 文件打開模式
打開文件
1.1
(1)以只讀模式“r”打開文件時,該文件必須已經(jīng)存在,否則拋出異常,且只能進(jìn)行讀取操作,打開時文件位置指針在文件的開頭。
(2)以只寫模式“w”打開文件時,如文件不存在,則以指定的文件名新建文件。若打開的文件已經(jīng)存在,則新數(shù)據(jù)覆蓋原文件中的已有數(shù)據(jù),且只能進(jìn)行寫操作。
(3)以追加模式“a”打開文件時,如果文件已存在,打開時文件位置指針在文件的末尾,也就是說,新數(shù)據(jù)將寫入到已有數(shù)據(jù)之后,如果文件不存在,則新建文件進(jìn)行寫入。
(4)“r+”“w+”“a+”模式都是既可讀也可寫,只是“r+”與“r”一樣,文件必須已經(jīng)存在。
(5)打開模式帶上“b”表示以二進(jìn)制文件格式進(jìn)行操作。
關(guān)閉文件
1.2
在Python中,雖然文件會在程序退出后自動關(guān)閉,但考慮到數(shù)據(jù)的安全性,每次使用完文件后,都應(yīng)使用close()方法關(guān)閉文件,其語法格式如下。
file.close()
其中,file為文件對象。例如,以只寫模式打開一個名為“test.txt”的文件,然后關(guān)閉文件,可以用下面代碼實現(xiàn)。
file = open('test.txt', 'w') #以只寫方式打開名為“test.txt”的文件
file.close() #關(guān)閉文件
with語句
1.3
Python中的with語句(上下文管理語句)用于對資源進(jìn)行訪問,保證不管處理過程中是否發(fā)生錯誤或異常,都會調(diào)用__exit__()方法,執(zhí)行規(guī)定的清理操作,釋放訪問的資源。它常用于文件操作、數(shù)據(jù)庫連接、網(wǎng)絡(luò)通信連接、多線程與多進(jìn)程同步時的鎖對象管理等場合,其語法格式如下。
with context_expression [as target(s)]:
with_body #執(zhí)行代碼
其中,context_expression是一個需要執(zhí)行的表達(dá)式,返回一個對象;target(s)用于保存context_expression返回的對象,可以是一個或多個。例如,讀寫文件時,with語句的用法如下。
with open(filename[, mode]) as file:
with_body #通過文件對象讀寫文件的語句
PART 02
讀寫文件
寫入文件
2.1
write()方法用于向文件中寫入指定字符串,其語法格式如下。
file.write(str)
其中,file表示文件對象,str表示要寫入文件的字符串。
【例8-1】 生日備忘錄。
【問題分析】 首先,以只寫模式打開文件(當(dāng)文件不存在時會創(chuàng)建文件);然后,向文件中寫入數(shù)據(jù),這里需要注意的是write()方法不會自動在字符串的末尾添加換行符,因此,當(dāng)輸入多行時,需要在write()語句中包含換行符;最后,關(guān)閉文件。
1. write()方法
寫入文件
2.1
【參考代碼】
#以只寫模式打開名為“birthday.txt”的文件
file = open('birthday.txt', 'w')
#向文件中寫入字符串
file.write('小藍(lán) 2011.01.01\n')
file.write('小舞 2010.08.15\n')
file.write('小明 2011.05.01\n')
file.write('小紅 2010.12.24\n')
file.close() #關(guān)閉文件
1. write()方法
寫入文件
2.1
【運行結(jié)果】 程序運行后,會在當(dāng)前工作目錄下生成一個名為“birthday.txt”的文件,打開該文件,可以看到數(shù)據(jù)成功寫入到了文件中,如圖8-1所示。
圖8-1 “birthday.txt”文件的內(nèi)容
1. write()方法
寫入文件
2.1
writelines()方法用于向文件中寫入字符串序列,如一個字符串列表,其語法格式如下。
file.writelines(sequence)
其中,file表示文件對象,sequence表示寫入文件的字符串序列。
【例8-2】 向生日備忘錄中追加生日信息。
【問題分析】 要向文件中追加數(shù)據(jù),須使用追加模式“a”打開文件。使用writelines()方法寫入數(shù)據(jù)時,同樣不會自動在列表后添加換行符,須手動加入。這里使用with語句進(jìn)行文件操作。
2. writelines()方法
寫入文件
2.1
2. writelines()方法
【參考代碼】
#定義列表并賦值
birthday = ['小果 2010.10.01\n', '小玉 2010.09.09']
#以追加模式打開“birthday.txt”的文件
with open('birthday.txt', 'a') as file:
file.writelines(birthday) #向文件中追加字符串列表
寫入文件
2.1
2. writelines()方法
【運行結(jié)果】 程序運行后,會將數(shù)據(jù)追加到“birthday.txt”文件中,打開該文件,可以看到數(shù)據(jù)成功追加到了文件中,如圖8-2所示。
圖8-2 追加數(shù)據(jù)后“birthday.txt”文件的內(nèi)容
讀取文件
2.2
read()方法用于從文件中讀取指定的字節(jié)數(shù),其語法格式如下。
file.read([size])
其中,file表示文件對象;size表示從文件中讀取的字節(jié)數(shù),如果缺省或為負(fù),則讀取整個文件內(nèi)容。該方法以字符串形式返回從文件中讀取的內(nèi)容。
1. read()方法
讀取文件
2.2
【例8-3】 按字節(jié)讀取生日備忘錄。
1. read()方法
【參考代碼】
#以只讀模式打開“birthday.txt”文件
with open('birthday.txt', 'r') as file:
line = file.read(14) #讀取前14個字節(jié)
print(line) #輸出前14個字節(jié)
print('*' * 20) #輸出20個*用于分隔
content = file.read() #讀取文件中剩余的所有內(nèi)容
print(content) #輸出文件中剩余的所有內(nèi)容
讀取文件
2.2
【運行結(jié)果】 程序運行結(jié)果如圖8-3所示。
1. read()方法
圖8-3 例8-3程序運行結(jié)果
【程序說明】 打開文件時,文件位置指針在文件的開頭,運行“l(fā)ine = file.read(14)”語句,就會從文件的開頭讀取14個字節(jié),由于第14個字節(jié)是一個換行符,而print()函數(shù)也會默認(rèn)換行,所以輸出“小藍(lán) 2011.01.01”和一個空行。當(dāng)執(zhí)行“content = file.read()”語句時,文件位置指針已經(jīng)在第14個字節(jié)處,因此,讀取了文件中剩余的所有內(nèi)容(不包括前14個字節(jié))。
讀取文件
2.2
readline()方法用于從文件中讀取一行,包括換行符,其語法格式如下。
file.readline([size])
其中,file表示文件對象,size表示從文件中讀取的字節(jié)數(shù),如果缺省,則讀取整行。
2. readline()方法
讀取文件
2.2
2. readline()方法
【例8-4】 按行讀取生日備忘錄。
【參考代碼】
#以只讀模式打開“birthday.txt”文件
with open('birthday.txt', 'r') as file:
while True:
line = file.readline() #讀取一行
if line: #如果讀取的內(nèi)容不為空
print(line, end='') #輸出一行
else: #如果讀取的內(nèi)容為空
break #退出循環(huán)
讀取文件
2.2
2. readline()方法
【運行結(jié)果】 程序運行結(jié)果如圖8-4所示。
圖8-4 例8-4程序運行結(jié)果
【程序說明】 上述代碼中,循環(huán)按行讀取文件中的內(nèi)容,如果讀取的內(nèi)容為空,則說明文件位置指針已經(jīng)在文件的末尾了,此時退出循環(huán)。
讀取文件
2.2
readlines()方法用于讀取所有行(直到結(jié)束符EOF)并返回列表,列表中每個元素為文件中的一行數(shù)據(jù),其語法格式如下。
file.readlines()
3. readlines()方法
讀取文件
2.2
3. readlines()方法
【例8-5】 一次性讀取生日備忘錄。
【參考代碼】
#以只讀模式打開“birthday.txt”文件
with open('birthday.txt', 'r') as file:
content = file.readlines() #讀取所有行并返回列表
print(content) #輸出列表
for line in content: #遍歷列表
print(line, end='') #輸出列表中的每個元素
讀取文件
2.2
3. readlines()方法
【運行結(jié)果】 程序運行結(jié)果如圖8-5所示。
圖8-5 例8-5程序運行結(jié)果
讀取文件
2.2
3. readlines()方法
當(dāng)讀取的文件非常大時,一次性將內(nèi)容讀取到列表中會占用很大內(nèi)存,影響程序執(zhí)行速度。因此,可以將文件本身作為一個行序列進(jìn)行讀取,遍歷文件的所有行可直接用下面代碼實現(xiàn)。
#以只讀模式打開“birthday.txt”文件
with open('birthday.txt', 'r') as file:
for line in file: #遍歷文件的所有行
print(line, end='') #輸出每行
讀取文件
2.2
3. readlines()方法
【例8-6】 統(tǒng)計2021年《政府工作報告》全文中出現(xiàn)次數(shù)前15的詞語。
【問題分析】 詞語出現(xiàn)次數(shù)統(tǒng)計涉及對詞匯的統(tǒng)計(即詞頻統(tǒng)計),從思路上看,詞頻統(tǒng)計只是累加問題,即對文檔中每個詞語設(shè)計一個計數(shù)器,每出現(xiàn)一次,相關(guān)計數(shù)器加1。可以采用字典來解決詞頻統(tǒng)計問題,以“詞語”為鍵,“計數(shù)器”為值。
中文字符之間沒有天然的分隔符,在進(jìn)行詞頻統(tǒng)計之前,需要對中文文本進(jìn)行分詞,此時,可使用jieba庫解決這個問題。
【參考代碼】
import jieba #導(dǎo)入jieba庫
#以只讀模式打開文件并讀取文件內(nèi)容
with open('2021年《政府工作報告》全文.txt', 'r') as file:
content = file.read()
讀取文件
2.2
3. readlines()方法
【參考代碼】(續(xù))
words = jieba.lcut(content) #進(jìn)行分詞,將結(jié)果放入words列表中
counts = {} #定義字典用于存儲詞語和計數(shù)器
for word in words: #遍歷words
if len(word) == 1: #排除單個字符的分詞結(jié)果
continue
else:
counts[word] = counts.get(word, 0) + 1 #計數(shù)器累加
items = list(counts.items()) #將字典元素轉(zhuǎn)換為列表
items.sort(key=lambda x:x[1], reverse=True) #根據(jù)計數(shù)降序排序
for i in range(15): #輸出前15項
word, count = items[i]
print('{0:<10}{1:>5}'.format(word, count))
讀取文件
2.2
3. readlines()方法
【運行結(jié)果】 程序運行結(jié)果如圖8-8所示。
圖8-8 例8-6程序運行結(jié)果
PART 03
定位文件
獲取當(dāng)前讀寫位置
3.1
在讀寫文件的過程中,如果想知道當(dāng)前文件位置指針的位置,可通過tell()方法來獲取,其語法格式如下。
file.tell()
該方法返回文件的當(dāng)前位置,即文件位置指針當(dāng)前位置,它是從文件頭開始的字節(jié)數(shù)。
定位到指定位置
3.2
如果在讀寫文件的過程中,需要從指定位置開始讀寫操作,就可以使用seek()方法移動文件位置指針到指定位置,其語法格式如下。
file.seek(offset[, from])
其中,file表示文件對象;offset表示偏移量,即偏移的字節(jié)數(shù);from表示起始點,即偏移的參考點。from有3種取值:0代表“文件開始位置”,1代表“當(dāng)前位置”,2代表“文件末尾位置”。缺省時取0,當(dāng)取2時,offset為負(fù)值,表示文件位置指針從文件末尾向前移動。
定位到指定位置
3.2
【例8-7】 讀取文件,統(tǒng)計并輸出文件內(nèi)容。
【參考代碼】
filename = input('請輸入文件名:') #輸入文件名
#以只讀模式打開文件,并設(shè)置編碼方式為UTF-8
with open(filename, 'r', encoding='UTF-8') as file:
file.seek(0, 2) #指針移到文件末尾
pos = file.tell() #獲取指針位置并賦給pos
file.seek(0, 0) #指針移到文件開頭
content = file.read(pos) #讀取pos個字節(jié)的內(nèi)容
#輸出字節(jié)數(shù)和內(nèi)容
print('共{}個字節(jié),內(nèi)容如下。\n{}'.format(pos, content))
【問題分析】 首先,打開指定的文件,文件名由鍵盤輸入;接著,使用seek()方法定位到文件末尾;然后,使用tell()方法返回文件位置指針當(dāng)前位置,即文件包含的字節(jié)數(shù);最后,使用seek()方法定位到文件開頭后,使用read()方法讀取文件內(nèi)容,并輸出字節(jié)數(shù)和文件內(nèi)容。
定位到指定位置
3.2
【運行結(jié)果】 程序運行結(jié)果如圖8-9所示。
圖8-9 例8-7程序運行結(jié)果
PART 04
高大上的文件系統(tǒng)
os模塊
4.1
Python標(biāo)準(zhǔn)庫的os模塊除了提供使用操作系統(tǒng)功能和訪問文件系統(tǒng)的簡便方法外,還提供了大量文件操作的方法,常用的方法如表8-2所示。
表8-2 os模塊的常用方法
os模塊
4.1
表8-2 os模塊的常用方法(續(xù))
os模塊
4.1
【例8-8】 創(chuàng)建文件夾,批量處理文件。
【問題分析】 首先,使用mkdir()方法在當(dāng)前工作目錄下創(chuàng)建“語文”文件夾,并使用chdir()方法將工作目錄切換到“語文”文件夾中;接著,在該目錄下使用for循環(huán)以只寫模式打開文件方式批量生成文件;然后,刪除其中一個文件后,生成一個同名文件夾;最后,使用listdir()方法返回“語文”文件夾下的文件列表,并使用for循環(huán)遍歷文件列表,使用rename()方法重命名每個文件。
其中,每次操作“語文”文件夾時,可通過輸出該文件夾下文件列表查看是否操作成功。
os模塊
4.1
【參考代碼】
import os #導(dǎo)入os模塊
os.mkdir('語文') #創(chuàng)建“語文”文件夾
os.chdir('語文') #將當(dāng)前目錄切換到“語文”文件夾中
#創(chuàng)建文件名列表
data_list = ['語法', '詩詞', '古文', '寫作', '外國文學(xué)']
for data in data_list: #遍歷文件名列表
filename = data + '.txt' #設(shè)置文件為txt文件
file = open(filename, 'w') #創(chuàng)建文件
file.close() #關(guān)閉文件
path = os.getcwd() #獲取當(dāng)前目錄
print(os.listdir(path)) #輸出文件列表
os模塊
4.1
【參考代碼】(續(xù))
os.remove(path + '\\外國文學(xué).txt') #刪除“外國文學(xué)”文件
os.mkdir('外國文學(xué)') #創(chuàng)建“外國文學(xué)”文件夾
file_name = os.listdir(path) #獲取當(dāng)前目錄下的文件和文件夾列表
print(file_name) #輸出文件和文件夾列表
i = 1
for name in file_name: #遍歷列表
if '.txt' in name: #如果為txt文件
new_name = str(i) + name #在原文件名前加上數(shù)字進(jìn)行編號
os.rename(name, new_name) #重命名文件
i += 1 #i加1
print(os.listdir(path)) #輸出文件和文件夾列表
os模塊
4.1
【運行結(jié)果】 運行程序,“語文”文件夾下文件列表的變化如圖8-10所示。重命名后的文件視圖如圖8-11所示。
圖8-10 “語文”文件夾下文件列表的變化
os模塊
4.1
圖8-11 重命名后的文件視圖
os.path模塊
4.2
os.path模塊提供了大量用于判斷路徑、獲取文件屬性的方法,常用的方法如表8-3所示。
表8-2 os模塊的常用方法
os.path模塊
4.2
例如:
#導(dǎo)入os.path模塊
import os.path
#輸出絕對路徑,結(jié)果為“D:\PycharmProjects\第8章\語文”
print(os.path.abspath('語文'))
#查看文件是否存在,結(jié)果為True
print(os.path.exists('語文'))
#分割目錄和文件名,結(jié)果為('D:\\PycharmProjects\\第8章', '語文')
print(os.path.split('D:\\PycharmProjects\\第8章\\語文'))
#分割文件名和擴(kuò)展名,結(jié)果為('例8-8', '.py')
print(os.path.splitext('例8-8.py'))
#查看文件大小,結(jié)果為1107
print(os.path.getsize('例8-8.py'))
shutil模塊
4.3
shutil模塊也提供了大量支持文件和文件夾操作的方法,常用的方法如表8-4所示。
表8-4 shutil模塊的常用方法
shutil模塊
4.3
【例8-9】 備份生日備忘錄。
【問題分析】 使用copy()方法將生日備忘錄“birthday.txt”中的內(nèi)容復(fù)制到另一個文件“birthday_copy.txt”中。
【參考代碼】
import shutil #導(dǎo)入shutil模塊
#復(fù)制文件內(nèi)容及權(quán)限
shutil.copy('birthday.txt', 'birthday_copy.txt')
shutil模塊
4.3
【運行結(jié)果】 程序運行后,“birthday_copy.txt”文件的內(nèi)容如圖8-12所示。
圖8-12 “birthday_copy.txt”文件的內(nèi)容
感謝觀看

展開更多......

收起↑

資源預(yù)覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 右玉县| 梅河口市| 榕江县| 和平区| 枣庄市| 乌兰浩特市| 察哈| 大石桥市| 佛坪县| 新泰市| 深水埗区| 阳江市| 明水县| 永善县| 包头市| 偃师市| 内江市| 平乡县| 许昌县| 北碚区| 泾源县| 永康市| 泗水县| 周口市| 鸡东县| 龙井市| 社会| 镇坪县| 武定县| 淮南市| 邢台县| 灵川县| 平泉县| 砚山县| 宁海县| 开阳县| 麻江县| 沙雅县| 平利县| 天全县| 平昌县|