實驗十二 文件處理
第1關:讀取宋詞文件,根據詞人建立多個文件
讀取wjcl/src/step1/宋詞.txt文件, 注意:宋詞文件的標題行的詞牌和作者之間是全角空格(" ")可復制該空格
在wjcl/src/step3/cr文件夾下根據每位詞人建立一個文本文件,將各位詞人的所有作品寫入對應的文件
?根據提示,在右側編輯器補充代碼,讀取wjcl/src/step1/宋詞文件,在wjcl/src/step3/cr/文件夾下根據每位詞人建立一個文本文件,將各位詞人的所有作品寫入該文件。
建立文件
文件的打開 <file對象名>=open(<文件名>,<打開模式>) 打開一個文件,并創建一個file類對象 打開模式為a,追加寫模式,文件不存在則創建,存在則在原文件最后追加內容 注意:打開文件后,指針定位在文件的最后 打開模式為w,覆蓋寫模式,文件不存在則創建,存在則完全覆蓋源文件。
寫入文件
f1.write(s) 向文件指針f1寫入一個字符串
import shutil
import os
if os.path.exists("wjcl/src/step3/cr"):shutil.rmtree("wjcl/src/step3/cr")
os.mkdir("wjcl/src/step3/cr")
f1=open("wjcl/src/step1/宋詞.txt",'r')
#代碼開始for i in f1:if " " in i:xm = i.strip()[i.rfind(" ")+1:]f2 = open("wjcl/src/step3/cr/"+xm+".txt", "a")if len(i.strip())>0:f2.write(i)#代碼結束
f1.close()
f2.close()
?第2關:讀取宋詞文件,并根據詞人建立多個文件夾
讀取wjcl/src/step1/宋詞文本文件,在wjcl/src/step4/sccr文件夾下根據每位詞人姓名建立文件夾
文件及文件夾的管理
Os模塊 os模塊為系統內置模塊,提供了對系統環境、文件、目錄等操作系統級的接口函數。 os.path.exists() 文件夾是否存在 mkdir() 創建目錄 rmdir() 刪除目錄 listdir() 返回指定目錄下的所有文件和目錄名 remove() 刪除文件
根據提示,在右側編輯器補充代碼,讀取wjcl/src/step1/宋詞文本文件,在wjcl/src/step4/sccr文件夾下根據每位詞人建立文件夾 注意:標題行的詞牌名和作者之間是全角空格 (" ")可在此復制
import os
import shutil
if os.path.exists("wjcl/src/step4/sccr"):shutil.rmtree("wjcl/src/step4/sccr")
os.mkdir("wjcl/src/step4/sccr")
f1=open("wjcl/src/step1/宋詞.txt",'r')
#代碼開始for i in f1:i = i.strip()if " " in i:xm = i[i.rfind(" ") + 1:]s = "wjcl/src/step4/sccr/"+ xmif not os.path.exists(s):os.mkdir(s)f1.close()
#代碼結束
第3關 讀取宋詞文件,建立多個詞人文件夾,為每首詞在文件夾下建立文本文件
讀取wjcl/src/step1/宋詞文本文件,為每位作者在wjcl/src/step5/cr下建立文件夾,再在作者文件夾下為每首詞建立一個文件 注意:標題行的詞牌名和作者之間是全角空格 (" ")可在此復制
李清照文件夾下的文件?
?
import os
import shutil
if os.path.exists("wjcl/src/step5/cr"):shutil.rmtree("wjcl/src/step5/cr")
os.mkdir("wjcl/src/step5/cr")
f1=open("wjcl/src/step1/宋詞.txt",'r')
#代碼開始for i in f1:if " " in i:a = i.find(" ")xm = i.strip()[a+1:]s = "wjcl/src/step5/cr/"+ xmif not os.path.exists(s):os.mkdir(s)pm = i.strip()[:a]f2 = open(s+"/"+pm+".txt","a+")f2.write(i) f1.close()
f2.close()
#代碼結束
?第4關:文件的統計
編寫統計文件夾下不同文件類型的數量和大小的程序。
os模塊
os模塊為系統內置模塊,提供了對系統環境、文件、目錄等操作系統級的接口函數 listdir() 返回指定目錄下的所有文件和目錄名 path.isfile() 檢驗是否是一個文件 path.splitext()? 文件名和擴展名分離 os.path.getsize() 獲取文件大小
注意:上述函數需要將文件夾和文件的完整路徑作為參數
import os
wjzd={}
wjsize={}
lj="wjcl/src/test"
#代碼開始
l = os.listdir(lj)
for i in l:if ".gitkeep" in i:continueelse:a = os.path.splitext(i)b = os.path.getsize("wjcl/src/test/"+i)wjsize[a[1]] = wjsize.get(a[1],0)+bwjzd[a[1][1:]] = wjzd.get(a[1][1:],0)+1
#代碼結束
lb=list(wjzd.items())
lb.sort()
lb2=list(wjsize.items())
lb2.sort()
for i in range(len(lb)):print("文件類型{}文件數{}文件大小{:.2f}KB".format(lb[i][0],lb[i][1],lb2[i][1]/1024))
第5關:文件的移動
編寫一個小程序,在test3文件夾下建立子文件夾,并根據文件類型將文件移動到相應的文件夾下。
os模塊
os模塊為系統內置模塊,提供了對系統環境、文件、目錄等操作系統級的接口函數。 listdir() 返回指定目錄下的所有文件和目錄名 mkdir() 創建目錄 rmdir() 刪除目錄 path.isfile() 檢驗是否是一個文件 path.splitext()? 文件名和擴展名分離 os.path.exists() 文件或文件夾是否存在
shulti模塊
shutil模塊是對os模塊的補充,主要針對文件的拷貝、刪除、移動、壓縮和解壓操作 rmtree(sdir) 刪除文件夾(包括所有子文件夾和文件) move(src, ddir) 移動文件到另一個文件夾
根據test3文件夾下文件的類型,在test3文件夾下建立相應的子文件夾,并將文件移動到相應的文件夾下。 具體來說,擴展名為.jpeg.jpg.png.jifi的文件移動到圖片子文件夾下,.mp3.wav移動到音頻文件夾下,.mp4.flv移動到視頻文件夾下,.txt.docx.pdf移動到文檔文件夾下。 提示:可以建立字典來指定文件夾和文件的對應關系
最后,需要在test3下建立圖片、文檔、音頻和視頻四個文件夾,并將文件按擴展名的對應關系移動到相應文件夾下 最后顯示如下
['ifs大熊貓.jpg', '基地1.jpg', '春熙路圖集1.jfif', '春熙路圖集2.jpeg', '春熙路圖集3.jfif', '杜甫草堂.png', '青城山.png']
['pq.flv', '七彩丹霞視頻.mp4', '云南十八怪_.mp4']
['學院設置.docx', '昆明.docx', '琵琶行并序.txt', '考題一.pdf', '考題四.pdf']
['add.wav', 'score.wav', '山歌好比春江水.mp3', '花兒尕戀手令.mp3']
import os
import shutil
wj={"圖片":".jpeg.jpg.png.jfif","文檔":".txt.docx.pdf","音樂":".mp3.wav","影像":".mp4.flv"}
lj1="wjcl/src/test2"
lj="wjcl/src/test3"
if os.path.exists(lj):shutil.rmtree(lj)
shutil.copytree(lj1,lj)
#代碼開始
k=os.listdir(lj)
k.remove(".gitkeep")
for i in wj.keys():if not os.path.exists(lj+"/"+i):os.mkdir(lj+"/"+i)for i in k:wjm,kzm=os.path.splitext(i)if kzm in wj["圖片"]:shutil.move(lj+"/"+i,lj+"/"+"圖片")if kzm in wj["文檔"]:shutil.move(lj+"/"+i,lj+"/"+"文檔")if kzm in wj["音樂"]:shutil.move(lj+"/"+i,lj+"/"+"音樂")if kzm in wj["影像"]:shutil.move(lj+"/"+i,lj+"/"+"影像")#代碼結束
ml=os.listdir(lj)
ml.sort()
for x in ml:if x!=".gitkeep":wj=os.listdir(lj+"/"+x)wj.sort()print(wj)