#記錄python學習中心得體會
實驗一:訪問指定目錄統計各個類型文件個數
import os
import os.path
def countFile(pathh):
all_file = os.listdir(pathh)
type_dict = dict()
for each_file in all_file:
each_file = os.path.join(pathh,each_file)
if os.path.isdir(each_file):
type_dict.setdefault('文件夾',0)
type_dict['文件夾'] += 1
else:
ext = os.path.splitext(each_file)[1]
type_dict.setdefault(ext,0)
type_dict[ext] += 1
for each_type in type_dict.keys():
print('該文件夾下共有類型【%s】的文件%d個'%(each_type,type_dict[each_type]))
countFile('E:\\')
心得:
1.選擇合適的類型存儲很方便,選擇字典,key爲文件類型,value爲數量。在思考的時候數據操作應該選擇合適的結構,往往會事半功倍。
2.在沒有學習遍歷的時候,遞歸訪問文件夾以及子目錄下的所有文件。
3.在被listdir分解後得到的列表中的值是文件名,不能用於判斷是否爲文件夾,會判斷永遠都不是文件夾,在判斷需要用join講路徑與文件名連接。
實驗二: 用戶輸入內容,保存到某文件。
def file_write(file_name):
f = open(file_name,'w')
print("請輸入內容【單獨輸入\' :q \' 保存退出】")
while True:
file_content = input()
if file_content != ':q':
f.write("%s\n" % file_content)
else:
break
f.close()
def file_write2(file_name,stopword):
f = open(file_name,'w')
print("請輸入內容【單獨輸入\' %s \' 保存退出】" %stopword)
file_connent = ''
for line in iter(input,stopword):
file_connent = file_connent + line + "\n"
#輸出到文件f
print(file_connent,file=f)
f.close()
file_name = input("請輸入文件名:")
stopword = input("請輸入結束標誌:")
##file_write(file_name)
file_write2(file_name,stopword)
心得:
1:input 內容不能換行,換行符是input函數默認結束方式,兩種方式解決問題。(1)結束符號換成用戶指定的符號 (2)輸入換行符後不讓其結束, (1)方法用到iter函數改變其結束符號
#插曲
iter函數
iter 有兩個參數
沒有第二個參數,第一個參數是支持迭代的序列對象或者集合對象
有第二個參數,第一個參數是可調用對象,調用對象沒有參數,當返回值爲第二個參數時,停止調用拋出異常,否則返回當前值
(2)在一個永遠不結束的循環中,只要輸入內容不等於指定結束符號就不退出。
2. print 參數 file 指輸出到指定文件
實驗三:查找目標目錄下在所有txt文件中查找關鍵字,並顯示出現在第幾行什麼位置
import os
def findFile(Sdir,target):
os.chdir(Sdir)
row = 0
for each_file in os.listdir(os.curdir):
if os.path.splitext(each_file)[1] == '.txt':
f = open(each_file,'r')
for each_line in f:
row += 1
temp = each_line.find(target)
if temp != -1:
print(os.getcwd() + os.sep + each_file)
print("出現在%d行,第【%d,%d】"%(row,temp,temp+5) + '\n')
row = 0
if os.path.isdir(each_file):
findFile(each_file,target)
os.chdir(os.pardir)
Sdir = input("請輸入待查找的初始目錄 ")
target = input("搜索的關鍵字 ")
findFile(Sdir,target)
心得:
1.這裏原來是出現了一處邏輯錯誤,後來結果看出來了,幸好不然我應該不會在深入整個函數過程。檢查函數邏輯思路很有必要。減少邏輯錯誤
2.在字符串計算中,中文和英文都是佔1個字節,難以致信
3.os.sep 表示當前操作系統路徑符號
最大體會:瞭解方法的返回值是什麼很重要