Unixでは、すべてのディスクがメインファイルシステム内のパスとして公開されていますので、os.walk('/')
は、たとえば/media/cdrom
とプライマリハードディスクをトラバースするため、一部のアプリケーションでは望ましくありません。Pythonのos.walkがマウントポイントを通過するのを防ぐにはどうしたらいいですか?
os.walk
を1つのデバイスに保存するにはどうすればよいですか?
関連:
Unixでは、すべてのディスクがメインファイルシステム内のパスとして公開されていますので、os.walk('/')
は、たとえば/media/cdrom
とプライマリハードディスクをトラバースするため、一部のアプリケーションでは望ましくありません。Pythonのos.walkがマウントポイントを通過するのを防ぐにはどうしたらいいですか?
os.walk
を1つのデバイスに保存するにはどうすればよいですか?
関連:
ではないことを確認する:トップダウンがtrueの場合、呼び出し側が インプレースにdirnamesリストを変更することができます
(おそらくデルまたはスライス 割り当てを使用して)、walk()は の名前がディレクトリ名に残っているサブディレクトリに再帰します; これは、このようなものが動作するはずですので、検索
を剪定するために使用することができ :
for root, dirnames, filenames in os.walk(...):
dirnames[:] = [
dir for dir in dirnames
if not os.path.ismount(os.path.join(root, dir))]
...
は素晴らしく簡潔な答えです。 –
os.walk()
は、それが別のドライブを閲覧していること(私の知る限りでは)言うことができません。自分で確認する必要があります。
はos.stat()
を使用してみてください、またはos.walk
ドキュメントからos.walk()
からルート変数が/media
私はos.path.ismountはあなたのために働くかもしれないと思います。あなたのコードは次のようになります。
import os
import os.path
for root, dirs, files in os.walk('/'):
# Handle files.
dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)),
dirs)
また、あなたのソリューションを構築するのに役立つthis answerを見つけることができます。
* dirs
を正しくフィルタリングしていただきありがとうございます。
ディレクトリを再割り当てすることはできません。 – Constantin
あなたは、コードを "dirs [:] = filter(...)"に変更して、リストの代わりに再配列する代わりにリストを突然変異させることで修正できます – Brian
http://stackoverflow.com/questions/530645/is-there-a-way-to-determine-if-a-subdirectory-is-in-the-same-filesystem-from-pyth/530692#530692 – sykora