LoginSignup
1
1

More than 5 years have passed since last update.

ファイル名が同じで拡張子のみが異なるファイルを検索する方法

Last updated at Posted at 2018-10-08

題名の通りです。
あまり需要はなさそうですが、備忘録的に書き残しておきます。

ソースコード

簡単ではありますが、いくつか躓く箇所があったので。
短いコードなのでまずはソースを見てもらった方が手っ取り早いと思います。
一応、Pythonのバージョンは3.6でpathlibを使用しています。

find_file_with_same_name.py
# -*- coding: utf-8 -*-
'''
ファイル名が同じファイルを抽出するプログラム
'''
from pathlib import Path


# 探索するディレクトリ
tar = '.'

# Pathオブジェクトを生成
current = Path(tar)

# ディレクトリ内のファイルを探索
files = list(current.glob('*.*'))

# ファイル一覧を保存するdict
files_dict = {}


# ファイル名をキーとして辞書型に格納する
for f in files:
    # ファイル名を取得
    file_name = f.resolve().stem

    # ファイル名をキーとしてdictに追加していく
    files_dict.setdefault(file_name, []).append(f)


# 重複ファイル一覧を保存するlist
dup_files = []

# dictに登録されたリストのサイズが1より大きい場合、重複であるとして抽出する
dup_files = [v for k, v in files_dict.items() if len(v) > 1]


print(dup_files)

同じディレクトリに"find_file_with_same_name.a"のようなファイルを配置してこのプログラムを実行すると以下のような結果が出力されます。
[[WindowsPath('find_file_with_same_name.a'), WindowsPath('find_file_with_same_name.py')]]

備考

工夫した点はdictのデータをlistで持ったところです。
pathlibを使えば拡張子を除いたファイル名をf.resolve().stemのようにして取得することが出来るので、これをキーとして辞書型にデータ(Pathオブジェクト)を格納していきます。
最終的に重複が確認されたPathオブジェクトはdup_filesにまとめられるのであとは移動するなり消去するなり好きにしてください。

より良い方法があればご教授よろしくお願いします。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1