2017-01-16 12 views
3

私は900の画像ファイル(すべてのpng、jpg、またはgif)を持っています。私は、各画像ファイルを取って1-900の番号に名前を変更するクイックコードを書こうとしています(順序は問題ではありません。それぞれユニークです)。私の試みは以下の通りです:これまでのところ連続した番号の画像ファイルのディレクトリの名前を変更

renamer.py

"""Rename directory of image files with consecutive numbers""" 
#Importing - os to make array of files and rename, Image to check file type 
import os 
from PIL import Image 

#Variables for script 
images_dir = "C:\file\directory\pictures\\temp\\" 
file_array = os.listdir(images_dir) 
file_name = 1 

#Loops through each file and renames it to either a png or gif file 
for file in file_array: 
    img = Image.open(images_dir + file) 
    if img.format != "GIF": 
     os.rename(images_dir + file, images_dir + str(file_name) + ".png") 
    elif img.format == "GIF": 
     os.rename(images_dir + file, images_dir + str(file_name) + ".gif") 
    file_name = file_name + 1 

、これはまったく機能していません。以前はPILのImageを使ってファイルを開き、希望の名前で保存して元のファイルを削除していましたが、これはいつも約700のどこかで失敗するので、私はこの方法を選択しました。それはとにかくより効率的に見えます。私は、エラーが何を意味するかまたはここからトラブルシューティングを行うかどうかはわかりません

C:\Python27\python.exe "renamer.py"

Traceback (most recent call last):

File "renamer.py", line 15, in

os.rename(images_dir + file, images_dir + str(file_name) + ".png") 

WindowsError: [Error 32] The process cannot access the file because it is being used by another process

Process finished with exit code 1

:私はPyCharmを使用していると私は取得していますエラーです。任意のヒント?また、他の/より効率的なやり方でこれをやり遂げるために何ができるかを見たいと思っています。

+1

バックアップを先に作成することを忘れないでください。 [いくつかの男の数日前](http://stackoverflow.com/q/41637906/1636276)画像ファイルの一括操作を実行しようとする彼の画像のすべてを失ってしまった。 – Tagc

+1

ディレクトリ名とファイル名を '+'で連結するのではなく、 'os.path.join'関数を使用することをお勧めします。また、まだテスト段階にある場合は、イメージの実際の名前を変更してはならず、そのコピーをプログラム内に作成し、それらのコピーを修正して適切に削除する必要があります。エラーの原因としては、枕を使用して画像を開いたことが考えられます。名前を変更する前にこのファイルを閉じてみてください – smac89

+1

ファイル 'Image.open(images_dir + file)'を開いている可能性があります。とにかく、ファイル名がその形式で終わっているかどうかをチェックしたり、拡張子を分割してチェックしたりするだけです。 –

答えて

4

Image.open()は、画像を開いて、そのヘッダを読み込み、まだ開いているファイルを保持しているので、オペレーティング・システムは、名前を変更することはできません。

名前を変更する前にdel imgを試してください。または、データのロードと画像ファイルの保持を強制的に試行する場合は、img.load()を試してください。

+0

ありがとう、それはまさに問題でした!あなたのソリューションと前述の@Steven Summersのソリューションの両方がImageの使用に役立った! – ThatGuy7

関連する問題