# '20/02/29更新:コードを見易く刷新しました。
本プログラムは、カレントディレクトリ以下のサブディレクトリ内を含む全てのファイルを再帰的に検索する。もしcsvファイルがあればその中身をすべてリストへ格納して、All_data.csvというひとつのファイルに追記してゆく仕様です。
▼本プログラム
#!/usr/bin/env python # -*- coding: utf-8 -*- import os, sys import csv import re def findCsv(): # カレントディレクトリ以下全て探索の関数 csvlist = [] dirlist = [] pathlist = [] for dirpath, dirnames, filenames in os.walk(os.getcwd()): # コメントアウトする場合は、インデントに注意。 # 複数行をまとめてコメントアウトする場合は「'」もしくは「"」で3つで囲む。 ''' print (dirpath) print (dirnames) print (filenames) ''' for i, filename in enumerate(filenames): m = re.search(".csv", filename) # 拡張子csvファイルを抽出する場合 if m: # mが真の場合に実行する。 csvlist.append(filename) # appendメソッドで、csvlistのリストにファイル名を追記。 dirlist.append(dirpath) # ディレクトリパスも、dirlistのリストに追記。 mypath = [dirpath, filename] pathlist.append(os.path.join(*mypath)) return pathlist def readFile(csvPath): # ファイルをcsv.readerでリストで読み込む datalist = [] with open(csvPath, 'r') as f1: reader = csv.reader(f1) for row in reader: datalist.append(row) return datalist def writeFile(datalist): # ファイルをcsv.writerで書き込む with open('All_data.csv', 'a') as f2: # 'a'は追記の意味。上書きの場合は'w' writer = csv.writer(f2, delimiter=',', lineterminator="\n") for row in datalist: writer.writerow(row) def main(): # csvファイルパスをリストで取得 pathlist = findCsv() for i, csvpath in enumerate(pathlist): print(i,'/',len(pathlist)) datalist = readFile(csvpath) # ファイルをcsv.readerでリストで読み込む writeFile(datalist) # ファイルをcsv.writerで書き込む if __name__ == '__main__': # このファイルを本体として実行した場合、mainが実行される。 main()
正規表現を用いてファイルを抽出する方法は下記リンク参照
以上