5

私は以下のようなコードを持っています:

temp = os.walk(sys.argv[1])
for root, dirs, files in temp:
    for i in dirs:
        dir = os.path.join(root,i)
        os.rename(dir, dir+"!")

それはほとんど問題なく動作します。ただし、親フォルダーの名前を変更すると、サブフォルダーの名前を変更することはできません。どうすればそれを回避できますか?

4

1 に答える 1

9

topdown代わりに False に設定してツリーを歩きます。

temp = os.walk(sys.argv[1], topdown=False)
for root, dirs, files in temp:
    for i in dirs:
        dir = os.path.join(root,i)
        os.rename(dir, dir+"!")

ドキュメントから:

オプションの引数topdownが指定されているTrueか指定されていない場合、ディレクトリのトリプルは、そのサブディレクトリのトリプルの前に生成されます (ディレクトリはトップダウンで生成されます)。topdownがの場合False、ディレクトリのトリプルは、そのすべてのサブディレクトリのトリプルの後に生成されます (ディレクトリはボトムアップで生成されます)。

したがって、最初にサブディレクトリの名前を変更し、最上位のディレクトリが最後に表示され、それらの名前を変更してもサブディレクトリの検索方法には影響しなくなります。

于 2012-08-05T12:16:24.357 に答える