次のように要約
は、提案された変更は、次のとおりです。
- 代わり
"."
の使用os.getcwd()
、あなたが望むように解決されていないようですので、。これは診断機能で示されます。
- 相対パスの名前変更を
os.chdir(root)
で使用してください。もちろんを使用すると、絶対パスのも有効ですが、IMHOの相対パスはより洗練されています。
- 他にも言及しているように、明確な文字列を
os.walk()
に渡します。
topdown=False
,os.walk()
にも注意してください。ディレクトリの名前を変更していないので、ディレクトリ構造はos.walk()
の間は不変になります。
コードサンプル
オリジナルのファイル構造:
[email protected]:/mnt/ramdisk/test$ tree .
.
├── outer
│ ├── inner
│ │ └── innermost.txt
│ └── inner.txt
├── outer.txt
└── rename.py
コード:
# -*- coding: utf-8 -*-
import os
def renamefiles(path):
for root, dirs, files in os.walk(path, topdown=False):
for f in files:
# chdir before renaming
os.chdir(root)
if f != "rename.py": # avoid renaming this file
os.rename(f, "renamed.txt") # relative path, more elegant
renamefiles(os.getcwd()) # pass an unambiguous string
たファイル構造:Debianでテスト済み
[email protected]:/mnt/ramdisk/test$ tree .
.
├── outer
│ ├── inner
│ │ └── renamed.txt
│ └── renamed.txt
├── renamed.txt
└── rename.py
8.6 64ビット、パイソン2.7.1 2(アナコンダ4.1.1)。
診断
# -*- coding: utf-8 -*-
import os
def renamefiles_check(path):
for root, dirs, files in os.walk(path, topdown=False):
for f in files:
print "========="
print "os.getcwd() = {}".format(os.getcwd())
print "root = {}".format(root)
print "f = {}".format(f)
print "os.path.abspath(f) = {}".format(os.path.abspath(f))
print "os.path.join(root, f) = {}".format(os.path.join(root, f))
# renamefiles_check(".")
# renamefiles_check(os.getcwd())
についてrenamefiles_check(".")
の最初の数行は、ここに示されています。
os.getcwd() = /mnt/ramdisk/test
root = ./outer/inner
f = innermost.txt
os.path.abspath(f) = /mnt/ramdisk/test/innermost.txt
os.path.join(root, f) = ./outer/inner/innermost.txt
あなたはそれを確認することができます。
行動os.path.abspath(f)
が希望ない (それを言わないで '間違っている)。常にファイルf
を含むパスの代わりにos.walk()
に渡されたパラメータpath
にバインドされます。
path
として"."
が渡された場合、os.path.join(root, f)
のドットはまだ完全には解決されていません。
サンプルコードは、これらのあいまいさを避けています。
あなたは 'os.walk'を適切に使用していません。(http://stackoverflow.com/questions/10989005/do-i-understand-os-walk-right) – TemporalWolf
あなたはあなたの更新されたコード。あなたのアップデートでオリジナルの質問を編集し、質問に答えないので「回答」を削除してください。 – TemporalWolf