1

私は、ファイル拡張子の名前を一括変更するこの小さなスクリプトを書こうとしました。ファイルが配置されているディレクトリ、現在の拡張子、新しい拡張子の3つの引数を渡します。

私が得ているエラーは

python batch_file_rename_2.py c:\craig .txt .html
Traceback (most recent call last):
  File "batch_file_rename_2.py", line 13, in <module>
  os.rename(filename, newfile) 
WindowsError: [Error 2] The system cannot find the file specified

コードは

import os
import sys

work_dir=sys.argv[1]
old_ext=sys.argv[2]
new_ext=sys.argv[3]

files = os.listdir(work_dir)
for filename in files:
    file_ext = os.path.splitext(filename)[1]
    if old_ext == file_ext:
        newfile = filename.replace(old_ext, new_ext)
        os.rename(filename, newfile)
4

3 に答える 3

6

os.listdir完全なパスではなく、ファイル名のみを返します。os.path.join正しいパスを再作成するために使用します。

for filename in files:
    file_ext = os.path.splitext(filename)[1]
    if old_ext == file_ext:
        newfile = filename.replace(old_ext, new_ext)
        os.rename(
            os.path.join(work_dir, filename), 
            os.path.join(work_dir, newfile))
于 2012-08-06T09:51:41.747 に答える
0

ディレクトリにいないときは、フルネームを指定する必要があります (そうではありません)。

os.rename(os.path.join(work_dir, filename), os.path.join(work_dir, newfile))
于 2012-08-06T09:52:34.490 に答える
0

問題は、os.listdirパスなしでファイル名のみを返すことです。関数を使用して とos.path.joinを結合する必要がwork_dirありfilenameます。

newfile = filename.replace(old_ext, new_ext)また、拡張子だけでなく、ファイル名の予期しない部分を置き換える可能性があるため、行は非常に安全ではないように見えます。

たとえばos.path、関数を使用して、より安全な方法でファイル拡張子を置き換えることができます。splitext

于 2012-08-06T09:52:55.463 に答える