ファイル名と数を事前チェック

投稿者: | 2022-07-02

目次

ファイル数をチェック

def check_file_cnt(cnt):
    """
    既定のファイル数をチェックする関数
    """
    f_cnt = len(f_list)
    if f_cnt == cnt:
        return True
    elif f_cnt > cnt:
        print(f'ファイル数が多すぎます(既定:{cnt})')
        return False
    elif f_cnt < cnt:
        print(f'ファイル数が不足しています(既定:{cnt})')
        return False
    else:
        print('エラー発生')
        return False

ファイル名をチェック

パターン最新

def check_filename(filename: str, *args: str) -> bool:
    """
    ファイル名のチェック
    """
    if len(args) > 0:
        ary = []
        for i in range(len(args)):
            bool = args[i] in filename
            ary.append(bool)
        return all(ary)
    else:
        raise IndexError('ファイル名を照会するキーワードがありません')

filename = '2211_交付金申請.csv'

result = check_filename(filename, "交付金申請", '2211', 'csv')
print(result)

パターン前回

  • 次の例では、あるファイル(の正規表現)がリストに含まれていればTrueを返す(=any())
  • フォルダにある全ファイル名は事前にリストになっている前提(globと内包表記を利用)
  • リストすべてのファイルが、その正規表現パターンになっているかを調べるのであれば、コメント箇所を利用する(=all()
def check_is_file(fname_regex):
    """
    指定したファイル名が、外部のファイル名リストにあればTrueを返す(any)
    ファイル名は正規表現で指定する。
    使い方:
    >>> fname_regex = re.compile(r'sample.*202205.*\.csv')
    >>> check_is_file(fname_regex)
    True
    >>> 
    """
    
    for f_name in f_list:
        # 合致しない -> 戻り値:None
        m = fname_regex.search(f_name)
        
        # f_listのいずれかに合致したらTrue = any()
        if m:
            return True
    print('ファイル名が合致しません。')
    return False 

    """
        # f_listのすべてに合致したらTrue = all()
        if not m:
           return False
    return True
    """

実行例文

dir_p = pathlib.Path('/Users/mbp441/Desktop/test')
f_list = [f.name for f in list(dir_p.glob('*'))]

# ファイル名一部、YYMM、拡張子をチェック
regex1 = re.compile(r'AAA.*2205.*\.csv')
regex2 = re.compile(r'BBB.*2205.*\.csv')
regex3 = re.compile(r'CCC.*2205.*\.csv')

chk1 = check_is_file(regex1)
chk2 = check_is_file(regex2)
chk3 = check_is_file(regex3)

# 個々の結果がすべてTrueであればTrue
is_file = all([chk1, chk2, chk3])

if check_file_cnt(3) and is_file:
    print("OK")
else:
    print("NG")