Python - 文件操作練習

#記錄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 表示當前操作系統路徑符號

最大體會:瞭解方法的返回值是什麼很重要

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章