0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

walkを使って特定のファイルサイズのリスト抽出

Last updated at Posted at 2021-12-16

walkの練習

フォルダ構成は下記のようになっています。
(コマンドプロンプトでtree フォルダ名 /f)

LOGS
│  log.txt
│  log2.txt
│  大きいファイル君1.htm
│  新規 Text Document.txt
│
├─.ipynb_checkpoints
├─202112_15
│  │  log.txt
│  │  log2.txt
│  │  大きいファイル君2.htm
│  │
│  └─.ipynb_checkpoints
│          大きいファイル君2-checkpoint.htm
│
└─2021_1214
    │  koko.txt
    │  大きいファイル君3.htm
    │
    ├─.ipynb_checkpoints
    └─その他
        │  大きいファイル君4.htm
        │
        └─.ipynb_checkpoints


まずはどのように表示されるか見てみる。

import os

dir = 'logs'
for path,sub,filenames in os.walk(dir):
    print(f"path:  ,{path}")
    print(f"sub:  ,{sub}")
    print(f"filenames:  ,{filenames}")

実行結果

path:  ,logs
sub:  ,['.ipynb_checkpoints', '202112_15', '2021_1214']
filenames:  ,['log.txt', 'log2.txt', '大きいファイル君1.htm', '新規 Text Document.txt']
path:  ,logs\.ipynb_checkpoints
sub:  ,[]
filenames:  ,[]
path:  ,logs\202112_15
sub:  ,['.ipynb_checkpoints']
filenames:  ,['log.txt', 'log2.txt', '大きいファイル君2.htm']
path:  ,logs\202112_15\.ipynb_checkpoints
sub:  ,[]
filenames:  ,['大きいファイル君2-checkpoint.htm']
path:  ,logs\2021_1214
sub:  ,['.ipynb_checkpoints', 'その他']
filenames:  ,['koko.txt', '大きいファイル君3.htm']
path:  ,logs\2021_1214\.ipynb_checkpoints
sub:  ,[]
filenames:  ,[]
path:  ,logs\2021_1214\その他
sub:  ,['.ipynb_checkpoints']
filenames:  ,['大きいファイル君4.htm']
path:  ,logs\2021_1214\その他\.ipynb_checkpoints
sub:  ,[]
filenames:  ,[]

pathの動きをみることで、どのような歩き方をしているかが分かる。
階層ごとに歩くのではなく、1つのディレクトリに深く入れるところまで入り、
また次のディレクトリを行く動きになっている。

最初にA,B,Cというサブディレクトリがあった場合、
A → A-1 → A-2 ・・・ B → B-1 ・・・C → C-1・・・と歩くようだ。

それでは次に、特定の要件を満たすファイルをリスト化する処理を書く

要件

  • 500キロバイト以上 1000キロバイト未満のファイルをタブル型でリストに追加
  • 出来たリストをサイズサイズが大きい順に並べ替える
## 500kb以上1000kb未満のファイルをリストにする
## フォルダ全体のサイズ

import os

def get_largefile_list(dir):
    large_file_list=[]
    size = 0
    for path,sub,filenames in os.walk(dir):
        for file in filenames:
            file_path = os.path.join(path,file)
            size = os.path.getsize(file_path)
            size = round(size/1024,1)
            if 1000>size >= 500:
                print(file_path)
                large_file_list.append((file,size))
    return large_file_list

large_file_list = get_largefile_list("logs")
large_file_list.sort(key=lambda s:s[1],reverse=True)
print(large_file_list)

実行結果

[('大きいファイル君4.htm', 796.9), ('大きいファイル君2.htm', 721.1), ('大きいファイル君3.htm', 721.1), ('大きいファイル君1.htm', 648.4), ('大きいファイル君2-checkpoint.htm', 648.4)]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?