[python]オフィス削除フォルダの下で重複ファイルを自動化

2884 ワード

転載は明記してください:陳熹[email protected](号:半は花の間酒)もし公衆号内で転載するならば公衆号に連絡してください:早起きPython
この例で学習できる知識点:
  • osモジュール総合応用
  • globモジュール総合応用
  • filecmpモジュールを用いて2つのファイル
  • を比較する.
    一、需要説明:
    Pythonプログラムを作成し、特定のフォルダの下にファイルが重複しているかどうかを確認し、重複があれば削除します.
    二、ステップ分析と前置き知識:
    このプログラムによって実現される論理は、指定されたフォルダの下にあるすべてのファイルを遍歴して取得し、ネストされたループを通じて2つの比較ファイルが同じかどうかを比較し、同じであれば後者を削除するように具現化することができる.
    問題を解決する鍵は、2つのファイルをどのように比較するかです.
    ここでは、filecmpモジュールについて説明します.公式ドキュメントでは、次のように説明されています.filecmp.cmp(f1, f2, shallow=True)は、f 1とf 2という名前のファイルを比較し、それらが等しいようであればTrueを返し、そうでなければFalseを返します.shallowが真の場合、同じos.stat()署名を持つファイルは等しいとみなされます.そうでなければ、ファイルの内容が比較されます.filecmp.cmp(x, y)は、xファイルとyファイルを比較し、ブール論理値を返し、2つのファイルが同じであればTrueを返します.以下のようにします.
    #   x y        
    print(filecmp.cmp(x, y))
    
    # True
    

    三、コード実装
    必要なライブラリをインポートし、ターゲットフォルダのパスを設定します.
    import os
    import glob
    import filecmp
    
    dir_path = r'C:\\xxxx'
    

    すべてのファイルの絶対パスを取得するglobモジュールのワイルドカードを利用してrecursiveパラメータを結合すれば完成し、フレームワークは以下の通りである.
    for file in glob.glob(path + '/**/*', recursive=True):
        pass
    

    各ファイルまたはフォルダを巡回して取得した後、ファイルかどうかを判断する必要があります.ファイルであれば、絶対パスをリストに保存する可能性があります.ここでは、2つのことを完了する必要があります.
  • 空のリストを作成し、list.append(i)でファイルパス
  • を追加します.
  • は、os.path.isfile(i)を利用するファイルであるか否かを判断し、Trueに戻ると要素を追加する操作
  • を実行する.
    コードは次のとおりです.
    file_lst = []
    
    for i in glob.glob(dir_path + '/**/*', recursive=True):
        if os.path.isfile(i):
            file_lst.append(i)
    

    ファイルの判断と削除を繰り返す
    前のステップでは、ターゲットフォルダの下にあるすべてのファイルパスを取得しました.次に、このパスのリストをネストすることができます.そのうち、filecmp.cmpはファイル判断を行い、os.removeはファイル削除を行います.
    for x in file_lst:
        for y in file_lst:
            if x != y:
                if filecmp.cmp(x, y):
                    os.remove(y)
    

    ここでのコードは大まかな論理を実現しているが、ファイルが前の判断で削除されたことにループする可能性があり、os.remove(file)がファイルが存在しないためにエラーを報告する可能性があることを考慮する必要がある.
    したがって、os.path.existsでファイルの存在を判断することができ、以下のようになる.
    for x in file_lst:
        for y in file_lst:
            if x != y and os.path.exists(x) and os.path.exists(y):
                if filecmp.cmp(x, y):
                    os.remove(y)
    

    これで、簡単なファイルのリトライプログラムが完了し、完全なコードは以下の通りです.
    import os
    import glob
    import filecmp
    
    dir_path = r'C:\xxxx'
    
    file_lst = []
    
    for i in glob.glob(dir_path + '/**/*', recursive=True):
        if os.path.isfile(i):
            file_lst.append(i)
    
    for x in file_lst:
        for y in file_lst:
            if x != y and os.path.exists(x) and os.path.exists(y):
                if filecmp.cmp(x, y):
                    os.remove(y)