#Pythonで特定ファイル探索
##はじめに
皆さん、職場で知りたいことがあるときに、知りたい内容がまとまった資料があればいいのにと思ったことないだろうか。今回は、自分のPCやサーバーで特定の文字を名前に含むファイルや特定の拡張子を持つファイルを探索する方法を紹介する。
※ページ下部のコメントでより良い書き方を教えていただいたので、そちらを参照ください。
##os.walk
Python module **"os"**の.walkというclassを使う。osはさまざまなOS操作をpython上で行うmoduleであり、ファイル操作、Job管理、環境変数の操作などができる。.walkは特定のpathの下層のフォルダとファイル名をすべて取得してくれるclassである。
##探査プログラム
以下にサンプルプログラムを示す。引数にファイル名の部分一致か拡張子一致を選ぶmode、探索対象のフォルダのpath、探索したいキーワードか拡張子を与えている。探索結果はcsvファイルで吐き出している。
※エンコーディングをコメントしてましたが、Pythonコーディング規約にそぐわないとご指摘いただいたので削除しました。
# -- coding: utf8 --
Pythonコーディング規約 : pep8
#!/usr/bin/env python
import sys
import os
import numpy as np
if len(sys.argv) != 4:
print("INPUT ERROR in python")
print("python find.py mode folder word")
print(" mode - select mode ")
print(" -1 = include in file name")
print(" -2 = match to file extension")
print(" folder - root directory for search ")
print(" word - keyword for finding file")
print("")
print(" output ")
print(" csv - path name list")
print("")
print(" e.g : python find.py -1 C:\ apple")
exit()
mode = sys.argv[1]
path = sys.argv[2]
word = sys.argv[3]
datray = np.array([])
datray = np.append(datray , "Path Name")
for root, dirs, files in os.walk(path):
for file in files:
path = os.path.join(root, file)
if mode == "-1":
if word in file:
print(os.path.join(root, file))
datray = np.append(datray , os.path.join(root, file))
if mode == "-2":
lword = -1*len(word)
ext = file[lword:]
if ext == word:
print(os.path.join(root, file))
datray = np.append(datray , os.path.join(root, file))
DAT = np.column_stack(datray)
outname = './find_' + str(word) + '.csv'
np.savetxt(outname, DAT , delimiter=",\n", fmt="%s")
##まとめ
今回は、Pythonを使って簡単な特定ワードを含むファイルまたは特定拡張子を持つファイルの探索プログラムを紹介した。暇つぶしに社内サーバーのファイルを漁ってみるのもいいだろう。