2017-06-09 8 views
1

解決法このコメントの下にあるEDITを参照してください。Pythonを使用して異なる拡張子を持つ重複ファイルを見つける

問題:は、私は以下のように画像のヒープとディレクトリ、名前の何かを持っている:

  • image001.nef
  • image002.nef
  • image003.nef
  • image003 - 20170609.jpg
  • image004.nef
  • image005.nef
  • image006 - 20170609.nef
  • image007.nef
  • image007 - 20170609.jpg
  • image008.jpg
  • image008 - 20170609.nef

重複したベース名(imageXXXなど)のすべての画像を検索し、拡張子はJPG

です

私の上記のリストから、削除する条件に一致するアイテムは3つしかありません(の太字はです)。

私は2,500枚の画像を持っていますので、私は手動で通過するのが望ましいです。

使用するサンプルスクリプトを見つけるのに苦労しています。私が見つけたものはすべて、ハッシュなどをチェックしていますが、画像は実際に似ていますが同一ではないと思います。

乾杯

編集:私はここに...私が望む出力を得ることができた仲の良い友達にする おかげで私のために働いていた最終的なコードです:

考える
import os 

directory = r'C:\temp' 
out_directory = r'C:\temp\temp_usa_photos' 
fns = os.listdir(directory) 


ref_nef = {fn[0:15] for fn in fns if fn.upper().endswith('.NEF')} 

print ref_nef 

out_list = filter(lambda e: e[0:15] in ref_nef, [fn for fn in fns if fn.upper().endswith('.JPG')]) 

print out_list 

for f in out_list: 
    input_file = os.path.join(directory, f) 
    output_file = os.path.join(out_directory, f) 
    os.rename(input_file, output_file) 
+0

あなたは今まで何をしていますか? – moritzg

+0

ファイル名に基づいてのみ削除する必要がありますか?私はあなたがすべての画像をループしてベース名を抽出し、dict/listに書き込んだり、さらに重複したものをすべて取り除いたりするのを防ぐことはできません。 – Euphe

+0

@moritzg私はちょうど元のコメントにコードを追加しました – Benno

答えて

1

>>> fns 
['image001.nef', 'image002.nef', 'image003.nef', 'image003 - 20170609.jpg', 'image004.nef', 'image005.nef', 'image006 - 20170609.nef', 'image007.nef', 'image007 - 20170609.jpg', 'image008.jpg', 'image008 - 20170609.nef'] 

(このリストをファイル名のリストのプロキシとして使用できます。globまたはlistdirをファイルに使用してください...)

ファイル名はフォームimageXXXのすべてをしている場合は、最初.nefファイルのファイル名の最初の8つの文字のセットを作成するためにそれを使用することができます

>>> ref_nef={fn[0:8] for fn in fns if fn.upper().endswith('.NEF')} 
>>> ref_nef 
set(['image008', 'image005', 'image004', 'image007', 'image006', 'image001', 'image003', 'image002']) 

はその後に.jpgファイルをフィルタリングするためにそれを使用します削除:

>>> filter(lambda e: e[0:8] in ref_nef, [fn for fn in fns if fn.upper().endswith('.JPG')]) 
['image003 - 20170609.jpg', 'image007 - 20170609.jpg', 'image008.jpg'] 
+0

私の新しい問題に非常に簡単な解決策があるのだろうかと思います。あなたの解決策は私の問題の99%を修正しましたが、私はちょうど不正なNEFファイルがあることを知りました。 [このスクリーンショット](http://i1355.photobucket.com/albums/q718/some_evil/2017-06-12%2020_44_20-temp_zpslkhxvmnt.jpg)が表示されている場合は、重複しているNEFファイルがあることがわかります。私のフォルダにすべてのNEWERファイルを取り除く方法があります。この場合、一番上の方が行く必要があります、それはより長い名前とより新しいものになります。これで助けてもらえますか?あなたの援助に感謝のヒープ! – Benno

+0

これが99%の場合は、これを使用します。その後、実際にファイルを読み込んで比較するdupの発見手法を使うことができます。これにはmd5ハッシュが便利です。がんばろう。あなたが立ち往生したら新しい質問をする – dawg

関連する問題