高知Python勉強会

非エンジニア × 高知 × Python !

ファルダに入っているファイルをすべてチェックする

 

 ファイルはフォルダに入れて管理するのが普通ですよね。でもそのファイルの分け方って作成時期で分けたり、カテゴリで分けたり。自分でわかってればいいのかもしれませんが、仕事でファルダごと業務を引き継いだりすると大混乱です。今回はPython (Python 3) を使ってあるフォルダから下層のフォルダすべてを順にチェックしてみます

In [1]:
import os
file_list=[]
# カレントディレクトリより下層のフォルダを os.fwalk()ですべてチェックしていきます
for root,dirs,files,rootfd in os.fwalk():
    for file in files:
        statinfo=os.stat(file,dir_fd=rootfd)# os.stat()でファイル情報を取得します
        file_list.append((root,file,statinfo)) # (ディレクトリ、ファイル名、ファイル情報)をリストに入れます
 

 (ディレクトリ、ファイル名、ファイル情報)の入ったリスト、file_listができました。os.stat()でファイル情報を取得してますので、ここから様々な情報を取り出してファイル整理に使うことができます。今回は最終更新日時を取得してみます。

In [2]:
import datetime

def getmdate(statinfo):
    """ファイル情報から最終更新日時を返す"""
    return datetime.datetime.fromtimestamp(statinfo.st_mtime)

text=""
for file in file_list:
    text+='{:%Y/%m/%d},{!s},{!s}\n'.format(getmdate(file[2]),file[0],file[1])
 

 これでtextという変数にカンマ区切りで更新日時、フォルダ名、ファイル名のテキストデータが入りました。これをCSVファイルに保存できれば、普段つかいなれているエクセルで扱えます。ただし、エクセルで扱う場合には文字コードutf-8からcp932に変換しておく必要があります。このとき悩ましいのが、濁点などがうまく変換できないことです。もっといい方法もあると思いますが、ここでは大胆かつ乱暴に、cp932に変換できない文字は消してしまいます。

In [3]:
text=text.replace('\u3099','')
text=text.replace('\u309a','')
text=text.replace('\u2028','')
text=text.replace('\u24ea','')
with open('filelist.csv',mode='wt',encoding='cp932') as f:
    f.write(text)
 

 filelist.csvというファイルがつくらました。このファイルをエクセルで開き、テーブル機能など使えば更新日時でのソート、並び替えができます。このデータをぼんやり眺めているだけで仕事の流れや、やるべき業務の優先順位などみえてきます。

 

 非エンジニアがPythonを仕事で使うコツは、最終的にワードなりエクセルなり、普段使っているソフトで使えるかたちに持ち込むことだと思いますよ。