Help us understand the problem. What is going on with this article?

同一ファイル名を探す Python プログラム

More than 3 years have passed since last update.

フォルダ(ディレクトリ)の階層に紛れた同名ファイルを探す

 フォルダの数や階層が多くなると、うっかりファイルを複製してしまい、似て非なるファイルが階層の中に残っていて、検索時や編集時に問題を起こしやすい。

 実は、しばらく使っていた階層管理のできるノートアプリにたっぷりたまったテキストファイルを機械的に移行するツールで他のノートアプリに持っていったら、どうやら複数の同名ファイルが存在していた。この際、すっきりと一掃してしまおうと、同名のファイルを見つけやすくするよう、ファイルリストを作成するプログラムを書いた。

プログラムの仕様

  • フォルダーのすべての階層をたどって、ファイル名+フォルダー名のリストを作る
  • リストをソートして、拡張子の前のファイル名が同じものに印を付ける
  • 同じファイルでも微妙に名前が違っている可能性があるので、すべてのリストを出力

 といったところ。全てのリスト(ファイル名順に並んでいる)を出力して、印のついたものと、印は付いていないものの、似たような名前が並ぶのを人の目で見て判断することもできるようにした。
(嫌なら印のついたものだけ見ればよい)

リストを作るプログラム(Python)

リストは、ファイル名とフォルダ名を「:」で区切って作成。
ファイル名の上昇順に並べる。
同じファイル名(拡張子の前)があったら、「***** duplicated file?? ****」を後ろに付ける。
調べるフォルダは、カレントのフォルダを最上位として探索する。
出力されるリストのファイル名は「out.txt」で、UTF-8 改行はLFのみとなっているので、環境に応じて修正して利用してください。

まだまだ、Python初心者なので、あちこちのWebサイトの情報を組み合わせて作りました。
ご意見、ご教授大歓迎です。

ListDupFile.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import codecs
import os

oList = []
odata = ""
prev = "...."

for root, dirs, files in os.walk(u'.'):
    for file_ in files:
        filename = file_
        itm = filename + u' : ' + root
        oList.append(itm)
oList.sort()
for data_ in oList:
    wList = data_.split('.')
    if prev in wList[0] :
        data_ = data_ + "  ***** duplicated file?? ****"
    prev = wList[0]
    odata = odata + data_ + "\n"
fout = codecs.open(u'out.txt',"w","utf-8")
fout.write(odata)
fout.close()

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした