Python 指定フォルダ内のファイル名、サイズ、日付の一覧を取得する方法

  本記事では、指定したフォルダ内にあるファイル名とサイズ、日付の一覧を取得してcsvファイルへ保存する雛形コードを載せました。

 例えば、下図のようにフォルダ内に複数のファイルがあります。この中から、拡張子「.exe」のファイルのみをリストで取得後、ファイルサイズと日付をループで取得してゆきます。

f:id:HK29:20200912140740p:plain

 下図は、本コード実行後に生成したcsvファイルです。日付取得については、まずはUNIXタイム(エポックタイム)で取得後、日時へ変換する仕様にしています。 日付順にソートしたり、列の位置を入れ替えたりしています。

f:id:HK29:20200913103609p:plain

■本プログラム

# -*- coding: utf-8 -*-
import os, glob
import datetime
import pandas as pd
import numpy as np

def convert_format_size_func(file_size):
    # 表記フォーマットを辞書で作成
    bit = { "KB": 10, "MB": 20, "GB": 30, "TB": 40}
    # 辞書のキーと値をループで順次、取得する
    for unit, bit_shift in bit.items():
        # ビット変換
        val = file_size / float(1 << bit_shift)
        if val < 1000:
            break # 1000未満になったらループを抜ける
        
    return "{:,.2f}".format(val) + " " + unit


def main():
    # 指定したディレクトリ内のexeファイルをリストで抽出する
    file_list = glob.glob(input_dir + '/*.exe')
    print(file_list)

    cnt = len(file_list)
    data_list = []
    for i, file_path in enumerate(file_list, start=1):
        # ファイルサイズの取得
        file_size = os.path.getsize(file_path)
        # ファイル表記をメガバイトへ変換
        file_size2 = convert_format_size_func(file_size)

        # ユニックスタイムの取得
        unix_time = os.stat(file_path).st_mtime
        # 日時へ変換
        date_time = datetime.datetime.fromtimestamp(unix_time)
        # 書式を変換
        date_time = date_time.strftime('%Y/%m/%d')
        
        print(i, '/', cnt, os.path.basename(file_path), file_size, date_time)
        data_list.append([os.path.basename(file_path), # 1
                          file_size, # 2
                          file_size2, # 3
                          unix_time, # 4
                          date_time] # 5
        )
    column_list = ['File_name', 'File_size', 'File_size2', 'Unix_time', 'Date_time']
    # リストからpandasのデータフレーム型へ変換する。この時列名はcolumns=でリストで与える。
    df = pd.DataFrame(data_list, columns = column_list)
    
    # 列名を指定してソートする(並び替える)
    df = df.sort_values(['Date_time'], ascending=True)

    # 列順を変更する
    df = df.iloc[:, [4, 0, 2]]
    
    # csvファイルへ書き出し
    df.to_csv('data.csv', sep=',', index=False, encoding='utf-8')
    print(df)
    
    
if __name__ == '__main__':
    input_dir = 'D:/00_backup/01_new'

    main()
    print("finished")

以上

<広告>