天天看點

.pth是什麼檔案_一個檔案處理的Python實戰項目

學習Python這麼久了,還沒嘗試寫過實戰項目,今天和大家分享一個用Python實作的檔案搜尋的一個小項目。

題目是這樣的:大家電腦上都安裝了Python,無論是py2.7還是py3.7,假如你安裝的是py3.7,搜尋py3.7下面的所有目錄(包括子目錄),裡面的所有檔案:

(1)、統計出整個Py3.7目錄下一共有多少個檔案夾和檔案

(2)、找到檔案容量最大的哪個檔案

(3)、找到檔案名最長的哪個檔案

大家可以先思考一下,盡最大可能寫代碼,我的代碼如下,當然不一定最好,供大家參考

from 
           

下面結合代碼,把涉及到的Python知識點解析一下。

(1)首先是導入division這個子產品,精确除法,當我們沒有在程式中導入該子產品時,“/”操作符執行的是階段除法,導入後則執行的是精确除法,如下所示:

>>> 3/4
0
>>> from __future__ import division
>>> 3/4
0.75
           

(2)os.path()子產品主要用于擷取檔案的屬性,以下是os.path子產品的幾種常用的方法:

.pth是什麼檔案_一個檔案處理的Python實戰項目

(3)引入os子產品,對于os知識的詳解,如下所示:

import os
for root,dirs,files in os.walk(r"C:UsersMEDesktopPython projectpachongscrapybaichuan2保險"):
    """
    os.walk() 方法用于通過在目錄樹中遊走輸出在目錄中的檔案名,向上或者向下。
    os.walk() 方法是一個簡單易用的檔案、目錄周遊器,可以幫助我們高效的處理檔案、目錄方面的事情。
    文法規則:os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
    top -- 是你所要周遊的目錄的位址, 傳回的是一個三元組(root,dirs,files)。
    root 所指的是目前正在周遊的這個檔案夾的本身的位址
    dirs 是一個 list ,内容是該檔案夾中所有的目錄的名字(不包括子目錄)
    files 同樣是 list , 内容是該檔案夾中所有的檔案(不包括子目錄)
    topdown --可選,為 True,則優先周遊 top 目錄,否則優先周遊 top 的子目錄(預設為開啟)。
    如果 topdown 參數為 True,walk 會周遊top檔案夾,與top 檔案夾中每一個子目錄。
    onerror -- 可選, 需要一個 callable 對象,當 walk 需要異常時,會調用。
    followlinks -- 可選, 如果為 True,則會周遊目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(預設關閉)。
    """
    print (root)
    for dir in dirs:
        print (os.path.join(root,dir))
    for file in files:
        print (os.path.join(root,file))


'''
           

(4)extend()函數,用在清單末尾一次性追加另一個序列中的多個值(用新清單擴充原來的清單)

文法:list.extend(seq),seq——元素清單,可以是清單、元組、集合、字典,若為字典,則僅會将鍵(key)作為元素依次添加至清單的末尾。

(5)round()函數傳回浮點數x的四舍五入的值

文法:round(x,n), x—數字表達式;n—表示從小數位,其中x需要四舍五入,預設值為0。

不可無視的round()函數,大家不要覺得這個函數很簡單,不就是對小數位的四舍五入嗎?但是round遇5是不進的,大家覺得是什麼原因呢?

print(round(1.315,2))

#1.31
           

一種是從精度損失的角度來解釋的,比如:

import decimal
print(decimal.Decimal(1.325))

#1.3249999999999999555910790149937383830547332763671875
           

從結果可以看出來,1.325用二進制轉化的時候有精度損失,部分小數無法完全用二進制表示。

不過,我更喜歡第二種解釋:

這不是bug,而是一種常見的舍入法,名稱是:銀行家式舍入法,用意是一半舍一半入,如果碰到0.5全入,那麼銀行覺得自己虧了,銀行希望和使用者要風險對半。

(6)清單嵌套,在我寫的代碼中涉及到清單嵌套這個概念,我用下面這個例子進行說明。

lis = [[4, 2, 9], [1, 5, 6], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[0]))
# [[1, 5, 6], [4, 2, 9], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[1]))
# [[4, 2, 9], [1, 5, 6], [7, 8, 3]]
print(sorted(lis, key=lambda k: k[2]))
# [[7, 8, 3], [1, 5, 6], [4, 2, 9]]
print(sorted(lis, key=lambda k: k[0], reverse=True))
# [[7, 8, 3], [4, 2, 9], [1, 5, 6]]
           

對于lambda x:x[n]的用法我已經在前面的文章詳細講過,今天主要是講一下清單的雙層嵌套。

lis = [[4,2,9],[1,5,6],[7,8,3]]
print(sorted(lis, key= lambda x:x[0],reverse=True)[0][0])
# 7
print(sorted(lis, key= lambda x:x[0],reverse=True)[0][1])
#8
print(sorted(lis, key= lambda x:x[0],reverse=True)[0][2])
#3
           

我覺得這個小項目對檔案處理有一定的實用意義,後期可以根據自己檢索的需要,擴充代碼。有時候讀别人的代碼也是一種學習的方式,但是你要把可運用的代碼都看懂,不懂的就去查,不熟悉就多注釋,就像我這樣,隻要堅持下去,肯定會有進步的。

.pth是什麼檔案_一個檔案處理的Python實戰項目