[python]オフィス削除フォルダの下で重複ファイルを自動化
2884 ワード
転載は明記してください:陳熹[email protected](号:半は花の間酒)もし公衆号内で転載するならば公衆号に連絡してください:早起きPython
この例で学習できる知識点: を比較する.
一、需要説明:
Pythonプログラムを作成し、特定のフォルダの下にファイルが重複しているかどうかを確認し、重複があれば削除します.
二、ステップ分析と前置き知識:
このプログラムによって実現される論理は、指定されたフォルダの下にあるすべてのファイルを遍歴して取得し、ネストされたループを通じて2つの比較ファイルが同じかどうかを比較し、同じであれば後者を削除するように具現化することができる.
問題を解決する鍵は、2つのファイルをどのように比較するかです.
ここでは、
三、コード実装
必要なライブラリをインポートし、ターゲットフォルダのパスを設定します.
すべてのファイルの絶対パスを取得する
各ファイルまたはフォルダを巡回して取得した後、ファイルかどうかを判断する必要があります.ファイルであれば、絶対パスをリストに保存する可能性があります.ここでは、2つのことを完了する必要があります.空のリストを作成し、 を追加します.は、 を実行する.
コードは次のとおりです.
ファイルの判断と削除を繰り返す
前のステップでは、ターゲットフォルダの下にあるすべてのファイルパスを取得しました.次に、このパスのリストをネストすることができます.そのうち、
ここでのコードは大まかな論理を実現しているが、ファイルが前の判断で削除されたことにループする可能性があり、
したがって、
これで、簡単なファイルのリトライプログラムが完了し、完全なコードは以下の通りです.
この例で学習できる知識点:
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)