1

我试图编写这个将批量重命名文件扩展名的小脚本。我传递了三个参数,文件所在的目录、当前扩展名和新扩展名。

我得到的错误是

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_dirfilename.

而且行newfile = filename.replace(old_ext, new_ext)看起来很不安全,因为它不仅可以替换扩展名,还可以替换文件名的一些意外部分。

os.path例如,您可以使用函数以更安全的方式替换文件扩展名splitext

于 2012-08-06T09:52:55.463 回答