状況:ファイルとディレクトリの総数を再帰的に個別に数えるPythonスクリプトがあります。コードは次のとおりです。
def traverse(top):
filecount = 0
dircount = 0
for root, dirs, files in os.walk(top):
for f in files:
if dirs: dircount += 1
elif files: filecount += 1
else:
print("Error")
break
print("Num of dir: " + dircount)
print("Num of files: " + filecount)
問題:コードを実行するたびに、ほぼ毎回ディレクトリとファイルの数が異なります。
Q:ファイルとディレクトリの数が変動する理由をお勧めしますか?おそらくこれがLinuxがどのように機能するのでしょうか?
追加情報:私のスクリプトのこの部分がプログラム全体にとって非常に重要であることを確認したいと思います。
答え1
実行中のUnixシステムは、通常の動作中に定期的に一時ファイルとディレクトリを作成します。
単にエディタでファイルを開いたり電子メールを送信するだけで一時ファイルを1つまたは2つ作成することができ、Webを閲覧するだけで短時間で何百ものファイルが作成および削除されることがあります。また、グラフィカルデスクトップ環境では、通常は不明なキャッシュやその他の操作を実行して一時ファイルを作成および削除できます。
最上位ディレクトリが何であるかによって、ホームディレクトリはもちろん、/tmp
その下のすべてのディレクトリのように頻繁に変更されるディレクトリを上書きする可能性が高くなります。/var
答え2
dirsは現在の(ルート)ディレクトリのディレクトリ名のリスト、filesは現在のディレクトリのファイル名のリストです。
私の考えでは、次のようなものがもっと欲しいと思います。
def traverse(top):
filecount = 0
dircount = 0
for root, dirs, files in os.walk(top):
dircount += len(dirs)
filecount += len(files)
print("Num of dir: " + dircount)
print("Num of files: " + filecount)