このPythonスクリプトを使用して、ディレクトリ内の複数のファイルの名前を変更しようとしています:
import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
i = 1
for file in files:
os.rename(file, str(i)+'.jpg')
i = i+1
このスクリプトを実行すると、次のエラーが表示されます。
Traceback (most recent call last):
File "rename.py", line 7, in <module>
os.rename(file, str(i)+'.jpg')
OSError: [Errno 2] No such file or directory
何故ですか?この問題を解決するにはどうすればよいですか?
ありがとう。
名前を変更する際にパス全体を渡すのではなく、次のようにします。
import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
for index, file in enumerate(files):
os.rename(os.path.join(path, file), os.path.join(path, ''.join(str(index), '.jpg')))
編集:tavoのおかげで、最初の解決策はファイルを現在のディレクトリに移動し、それを修正しました。
まず、このパスを現在の作業ディレクトリとして作成する必要があります。簡単です。残りのコードにはエラーはありません。
現在の作業ディレクトリにするには:
os.chdir(path)
@danielのコメントによると、os.listdir()はファイルの完全なパスではなく、ファイル名のみを返します。 os.path.join(path、file)を使用してフルパスを取得し、その名前を変更します。
import os
path = 'C:\\Users\\Admin\\Desktop\\Jayesh'
files = os.listdir(path)
for file in files:
os.rename(os.path.join(path, file), os.path.join(path, 'xyz_' + file + '.csv'))
受け入れられた答えで遊ぶだけで、パス変数とリストを定義します。
path = "/Your/path/to/folder/"
files = os.listdir(path)
そして、そのリストをループします:
for index, file in enumerate(files):
#print (file)
os.rename(path+file, path +'file_' + str(index)+ '.jpg')
またはpython list comprehensionのように1行で同じ方法でループします:
[os.rename(path+file, path +'jog_' + str(index)+ '.jpg') for index, file in enumerate(files)]
私は最初の方が読みやすいと思います、2番目ではループの最初の部分はリスト内包のちょうど2番目の部分です
ファイルの名前がランダムに変更されている場合は、最初にディレクトリ内のファイルを並べ替える必要があります。指定されたコードは、最初にソートしてからファイルの名前を変更します。
import os
import re
path = 'target_folder_directory'
files = os.listdir(path)
files.sort(key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])
for i, file in enumerate(files):
os.rename(path + file, path + "{}".format(i)+".jpg")