アイキャッチ画像

PythonとExcelでフォルダの使用量を調べてみた

PythonとExcelを組み合わせて、フォルダ(ファイル)がどれくらいの使用量になっているか調べてみました。

目次

  1. SSDの空きを増やすためにフォルダの使用量を調べる
  2. Excelのツリーマップでフォルダの使用量を可視化する
  3. Pythonでファイルサイズを調べる
  4. フォルダ使用量を調べた実施例

SSDの空きを増やすためにフォルダの使用量を調べる

SSDが普及して動作が速くなったのは良いのですが、HDDに比べるとSSDは容量単価が高価なため、どうしてもドライブの空き容量が小さくなりがちです。

そこで不要になったファイルを消すのですが、どうせなら占有容量が大きいのをなんとかしたい。

でも、Windows10の標準機能で、どのファイルがディスクを圧迫しているのか調べる機能はありません。

そこでPythonとExcelを組み合わせて、ファイルの占有容量を可視化してみました。

Excelのツリーマップでフォルダの使用量を可視化する

ツリーマップというグラフの描き方をご存じでしょうか。ツリーとはいいますが、各要素の大きさを面積で表すことで比較できるようにした平面のマップです。

このツリーマップがExcel 2016以降で標準で使えるようになりました。

ツリーマップを作成するには、シートに階層構造のデータを入力する必要があります。

ツリーマップの例

階層構造といえば、ディレクトリツリーですね。

Excel VBAでこれを作るのは(私個人的に)しんどいので、Pythonでファイル容量の調査とExcelに入力する用のCSVファイルを作成して、Excelではグラフ作成だけを行うようにします。

Pythonでファイルサイズを調べる

Pythonでファイルサイズを調べます。

手順としては、下記のようになります。

  1. ファイルをリストアップする。
  2. リストアップした ファイルのサイズを調べる。
  3. CSV出力用にデータを整形する。
  4. CSV出力する。

コードはこんな感じです。

import os
import os.path
import csv

# ファイルのフルパスとサイズを取得する。
filedata = []
errorfile = []
for dirpath, dirname, filename in os.walk('c:\\program files\\python37'):
    for f in filename:
        fd = {}
        fd['fullname'] = os.path.join(dirpath,f)
        try:
            fd['filesize'] = os.path.getsize(fd['fullname'])
        except:
            fd['filesize'] = 0
            errorfile.append(fd['fullname'])
        filedata.append(fd)

# パスを分解し、深さを計算する。
max_depth = 0
for f in filedata:
    splited = f['fullname'].split('\\')
    f['splited'] = splited
    path_depth = len(splited)
    f['depth'] = path_depth
    if max_depth < path_depth:
        max_depth = path_depth

# 最も深いパスに合わせてリストを拡張する。
for f in filedata:
    while len(f['splited']) < max_depth:
        f['splited'].append('')

# CSV出力用のリストを作成する。
outdata = []
for f in filedata:
    t = f['splited']
    t.append(f['filesize'])
    outdata.append(t)

# 出力する。
with open('out.csv', mode='w', newline='', encoding='shift_jis') as fo:
    csv_writer = csv.writer(fo)
    csv_writer.writerows(outdata)
if len(errorfile) > 0:
    print('次のファイルのサイズが読み取れませんでした。')
    for f in errorfile:
        print(f)

なんのひねりもないコードですね。

フォルダ使用量を調べた実施例

上記のプログラムを実行すると、Python3.7のディレクトリ以下のファイルのサイズをすべて取得したCSVファイルが出力されます。

c:,program files,python37,LICENSE.txt,,,,,,,,,,,30189
c:,program files,python37,NEWS.txt,,,,,,,,,,,632203
c:,program files,python37,python.exe,,,,,,,,,,,99992
c:,program files,python37,python3.dll,,,,,,,,,,,59032
c:,program files,python37,python37.dll,,,,,,,,,,,3771032
c:,program files,python37,pythonw.exe,,,,,,,,,,,98456
以下省略

これをExcelで開きます。

CSVファイルをExcelで開く

そして、D列からO列を選択してツリーマップを作成します。

ツリーマップ

「Lib」というディレクトリの占有量が大きいことがわかりますね。

ではD列が「Lib」ではない行を削除して、E列からO列を選択してツリーマップを作成します。

下層のツリーマップ

「site-packages」というディレクトリの占有量が大きいことがわかりますね。

こうしてどのディレクトリ(ファイル)を削除するか(アーカイブするか)を検討します。

広告

作ってみたカテゴリの投稿