2012-01-01 1 views
2

私は、フォルダランダムな名前のすべてのJPGファイルを与えることを試みていますので、彼らは私のデジタル写真フレームの上にセミランダムな順序で表示されますがPythonのエラーウィンドウでファイル名を変更する場合

これは私がしようとしているコードがあります使用する:私はそれを実行したときに

import os 
import random 

for filename in os.listdir("."): 
    hold = random.randint(1,100000) 
    f=str(hold)+'.jpg' 

    if(filename.endswith('.jpg') or (filename.endswith('.JPG'))): 
     os.rename(filename,f) 

をしかし私が手に:それは実行されませんなぜ私が見た

WindowsError: [Error 82] The directory or file cannot be created. 

すべては私のコードは動作するはずのように見えます、私は知りません。

編集:私はFATとしてフォーマットSDカードにファイルをコピーしました:それは私が

EDIT2の名前を変更しようとしているファイルの名前にスペースがあるという事実にその原因のように思えます私がそれを実行していたフォルダには最大数の項目があります。私はいくつかのファイルをサブディレクトリに移動して解決しました。

+0

ようこそStackOverflow!私たちがここで「解決済み」として質問をマークした方法は、[あなたがあなた自身を提供した回答であっても](http:// meta(http://stackoverflow.com/faq#howtoask) .stackexchange.com/q/31809/147331))! – Johnsyweb

答えて

0

私はFATとしてフォーマットSDカードとIが最大数を持っていたでそれを実行していたフォルダにファイルをコピーしましたその中のアイテム。私はいくつかのファイルをサブディレクトリに移動して解決しました。

0

名前が変更されている可能性があります。あなたのコードにいくつかのデバッグプリントを追加し、正確に失敗したときを見てください。名前を変更する前に、print 'Renaming %s to %s' % (filename, f)を追加し、名前の変更に失敗したときを参照してください。

0

問題は、変数filenameが実際のファイルではなく文字列であることです。 os.listdir()は、そのフォルダ内のファイル名である文字列のリストを返します。ファイルを開いて名前を変更して保存するには、open( "w"、filename)を使用する必要があります。

0

os.rename()のドキュメントを見て、Windowsで、名前を変更しようとしているファイルが既に存在する場合は、OSErrorを発行します(OSにアトミックな名前を変更する方法がないため)。つまり、JPEGの名前を変更するファイルがすでにディレクトリに存在する場合、os.renameはWindowsで失敗します。

現在のディレクトリにあるファイルの名前を、既に存在する別のファイルに変更しようとしている可能性があります。あなたはあまりにも難しいことではありませんこれは、それに対してチェックするコードを追加する必要があります:

filelist = os.listdir('.') 
for filename in filelist: 
    hold = random.randint(1,100000) 
    f=str(hold)+'.jpg' 

if filename.lower().endswith('.jpg') and f not in filelist: 
    os.rename(filename,f) 
関連する問題