PythonとExcelでフォルダの使用量を調べてみた
PythonとExcelを組み合わせて、フォルダ(ファイル)がどれくらいの使用量になっているか調べてみました。
目次
SSDの空きを増やすためにフォルダの使用量を調べる
SSDが普及して動作が速くなったのは良いのですが、HDDに比べるとSSDは容量単価が高価なため、どうしてもドライブの空き容量が小さくなりがちです。
そこで不要になったファイルを消すのですが、どうせなら占有容量が大きいのをなんとかしたい。
でも、Windows10の標準機能で、どのファイルがディスクを圧迫しているのか調べる機能はありません。
そこでPythonとExcelを組み合わせて、ファイルの占有容量を可視化してみました。
Excelのツリーマップでフォルダの使用量を可視化する
ツリーマップというグラフの描き方をご存じでしょうか。ツリーとはいいますが、各要素の大きさを面積で表すことで比較できるようにした平面のマップです。
このツリーマップがExcel 2016以降で標準で使えるようになりました。
ツリーマップを作成するには、シートに階層構造のデータを入力する必要があります。
階層構造といえば、ディレクトリツリーですね。
Excel VBAでこれを作るのは(私個人的に)しんどいので、Pythonでファイル容量の調査とExcelに入力する用のCSVファイルを作成して、Excelではグラフ作成だけを行うようにします。
Pythonでファイルサイズを調べる
Pythonでファイルサイズを調べます。
手順としては、下記のようになります。
リストアップした ファイルのサイズを調べる。
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で開きます。
そして、D列からO列を選択してツリーマップを作成します。
「Lib」というディレクトリの占有量が大きいことがわかりますね。
ではD列が「Lib」ではない行を削除して、E列からO列を選択してツリーマップを作成します。
「site-packages」というディレクトリの占有量が大きいことがわかりますね。
こうしてどのディレクトリ(ファイル)を削除するか(アーカイブするか)を検討します。
公開日
広告
作ってみたカテゴリの投稿
- PythonでFizzBuzz問題をやってみた
- PythonでPDFファイルのサムネイル画像を作る
- Pythonでオブジェクトを選択してクロップするツールを作ってみた
- Pythonでデータロガーのログから瞬断を抽出してみる
- Pythonで写真の中の線を抽出してみた
- Pythonで動画から静止部分を抜き出してみた
- Pythonで測定データのピーク値を検出してみる
- Pythonで複数のCSVデータを1つのファイルにまとめてみた
- PythonとExcelでフォルダの使用量を調べてみた
- Sphinx(ablog)の後処理をする
- WordPressのブログを静的サイトに書き換えてみました
- シェルスクリプトでSphinxのビルドの前処理をする
- 数式を中置記法から後置記法(逆ポーランド記法)に変換してみた