2016-09-26 18 views
0

サブディレクトリのリストを繰り返して、そのサブディレクトリ内のファイルを開き、ファイルの名前を小文字に変更しようとしています。ここに私のコードです:Pythonディレクトリの繰り返しと名前の変更

for root, subdirs, pics in os.walk(rootdir): 
    for pic in pics: 
    if pic.endswith('.jpg'): 
     picpath = os.path.join(pic) 
     #print pic 
     print picpath 
     #os.rename(pic, pic.replace(" ", "-").lower()) 
     os.rename(picpath, picpath.replace(" ", "-").lower()) 

私はその後、取得:

Traceback (most recent call last): File "imageresizing-renamefiles.py", line 19, in os.rename(picpath, picpath.replace(" ", "-").lower()) OSError: [Errno 2] No such file or directory

マイファイル構造はImage1jpgfolder1Image2jpg以下の通りコードから、そのフォルダ内で実行されるルートディレクトリで、folder2Image3jpgImage4jpgなどとなります。私はそれぞれのファイルを(フォルダではなく)小文字に改名したい

ありがとうございました。

+1

'topdown = False'を' os.walk'に渡したいとします。 – mgilson

+2

'picpath = os.path.join(pic)' - > 'picpath = os.path.join(root、pic)' –

+0

@mgilson素敵なアイデアはここでは不要ですが、ディレクトリの名前を変更する必要がある場合は非常に便利です。 –

答えて

1
picpath = os.path.join(root, pic) 
        # ^^^^^ 

ジョブを実行する必要があります。 、the docsパーあなたは「そのようなファイル」エラーを得ている理由である

Note that the names in the lists contain no path components. To get a full path (which begins with top) to a file or directory in dirpath, do os.path.join(dirpath, name).

:エラーが発生した時点でrootではありません、現在のディレクトリ内のファイル名、求めています。

+1

'もしpic.endswith( '。jpg'):' isn安全ではない。 'pic..lower().endswith( '。jpg'):'または 'fnmatch'モジュールを使って' IMG.JPG'が見えなくならないようにする方が良いでしょう。 –

+0

@Gshare変更を最後に追加するには、[あなたの質問を編集してください](https://stackoverflow.com/posts/39710929/edit)をクリックしてください。この問題が解決され、別の問題が発生した場合は、新しい質問をしてください! – cxw

+1

'lower()'は、大文字と小文字を区別するファイルシステムで 'lower()'を削除します:pythonはdir構造全体の名前を小文字に変更できません!! –

1

パスにディレクトリ名を追加するか、os.renameが名前を変更する適切なディレクトリを見つけることができません。

つまり、小文字に変換するとタスクが複雑になります。小文字はbasenameにのみ適用する必要があります(大文字小文字は関係ありませんので、Windowsファイルシステム上で動作しますが、パスのいくつかのディレクトリに大文字が含まれているとLinuxでは失敗します)。幸いにも、renameコマンド)

そして.jpg拡張のための試合では、小文字に画像の名前を変換したい特別な場合は、筐体に関係なく行われるべきである:拡張子はあまりにも(

for root, subdirs, pics in os.walk(rootdir): 
    for pic in pics: 
    if pic.lower().endswith('.jpg'): # more powerful: fnmatch.fnmatch(pic,"*.jpg") 
     os.rename(os.path.join(root,pic), os.path.join(root,pic.replace(" ", "-").lower())) 
)これらすべてのDCIMのカメラのように大文字である可能性が高いです
+0

良いキャッチ!それは確かに微妙です。 – cxw

+0

@cxw:同時回答を投稿したくはありませんでしたが、いくつかの潜在的な問題が残っていたため、それぞれにコメントするのが難しくなりました。あなたが気にしないことを願っています。 –

+0

もちろん、そうではありません!とにかく、OPの問題を解決すれば、それにふさわしい担当者を得なければなりません:)。私は実際に個人的にコメントの編集や回答への回答を好みます(私が司会者になれる理由の1つ)。 – cxw

関連する問題