
状況: ファイルとディレクトリの合計数を再帰的に個別にカウントする 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)
問題: コードを実行するたびに、ディレクトリとファイルの数が異なります。
質問: ファイルとディレクトリの数が変動する理由を教えていただけますか? 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)