目次
・目的
・手順
・コード
・解説
・課題
目的
自社のプログラムはディレクトリで保管され、ファイル1行目に識別コードでバージョン管理しています。
開発フェーズで使うプログラムかどうかは、その識別コードと仕様書を照らし合わせる作業が出てきています。
その作業がとても面倒なので、ファイル名と識別コードを抜き出したものをテキストファイル出力させて単純化したい。
手順
1. 指定したパス配下・拡張子ファイルを探索する
2. ファイル1行目の文字列を抽出する
3. "ファイル名:文字列"という中身のテキストファイルを出力する
指定したパス配下は、以下のようなファイル構成になっています。
ファイル名はプログラムでランダムな文字列です。
コード
File_Finder.py
import os
from pathlib import Path
import re
Output_path = r"OUTPUT_PATH"
Search_path = r"SEARCH_PATH"
folder = []
# .c,.hファイルを探してリスト型データにする
def file_finder(_path):
os.chdir(_path)
temp = Path(_path)
file_list = [p for p in temp.glob("**/*") if re.search(".(c|h)", str(p))]
for path in file_list:
if not os.path.isdir(path):
folder.append(os.path.relpath(path, Search_path))
return folder
# リストから全ファイルを開き、1行目だけを抜き出して閉じる。辞書型にして{相対path:"1行目"}となるようにする
def file_read(*folder_list):
read_data = {}
for j in folder_list:
if os.path.isdir(j):
with open(j, "r") as f:
read_data[j] = f.readline()
f.close()
else:
with open(j, "r") as f:
read_data[j] = f.readline()
f.close()
return read_data
# 一つのテキストファイルとして出力する
def file_list_generator(**dictionary):
os.chdir(Output_path)
with open("soft_list.txt", "w") as f:
for k, i in dictionary.items():
temp = str(i).replace("/* ", "")
temp = temp.replace(" */", "")
f.write("{} : {}\n".format(k, temp))
f.close()
file_list = file_finder(Search_path)
file_dict = file_read(*file_list)
file_list_generator(**file_dict)
解説
関数毎に説明していきます。
・file_finder()
・file_read(*list)
・file_list_generator(**dict)
file_finder() #パス配下の.c/.hファイルを抽出,リストで返す