trsing’s diary

勉強、読んだ本、仕事で調べたこととかのメモ。

pythonで特定の文字列を含むファイル名の抽出

Pythonでファイル名に特定の文字列が含まれるものをフォルダ名とセットで抽出。

import os
 
#dir以下のフォルダと特定の文字列(Move,.cs)を含むファイルをディクショナリにして返す
#key:フォルダ名、value:ファイル名のリスト
def dirfiles(dir):
    dfdict={}
    for d,s,f in os.walk(dir):
        #フォルダdにあるファイルでファイル名に「Move」と「.cs」を含むファイル
        flst=['\t'+fname+'\n' for fname in f if 'Move' in fname and '.cs' in fname]
        if 0<len(flst):
            dfdict['{}'.format(d+'\n')]=flst
    return dfdict
 
#dicの中身をfileに書き出す
def writefile(file,dic):
    with open(file, mode='w') as wf:
        for k in dic:
            wf.write(k)
            for fn in dic[k]:
                wf.write(fn)
 
dfdict={}
dnames = [fname for fname in os.listdir() if os.path.isdir(fname)]#フォルダ名
for dname in dnames:
    #.values()でlistのlistが返ってくる。sumでリストを連結
    dfdict[dname+'\n'] = sum(dirfiles(dname).values(),[])
    if 0==len(dfdict[dname+'\n']):
        dfdict.pop(dname+'\n')
 
writefile('move1.txt', dfdict)#直下のディレクトリとそのディレクトリ下にあるファイル名
writefile('move2.txt', dirfiles('./'))#各ディレクトリとそのディレクトリ下にあるファイル名

引き継いだソースコードで動作が記述されたファイル(名称に"Move"を含む)を一覧にしたかったので。2000個以上出てきた。私にどうしろと言うのですか…。

※sumはリストの連結にも使える doc.code161.com