3

我正在尝试构建一个小的重命名程序,以帮助我在未来节省时间。基本上它会通过我指向它的目录,如果它们符合某些条件则重命名文件。

我已经写了我需要的东西,但是我一开始就有一个我无法弄清楚的错误。

这是代码:

import os
import fnmatch

for file in os.listdir("""/Users/Desktop/TESTME"""):
    if fnmatch.fnmatch(file,'MISC*'):
        os.rename(file, file[4:12] + '-13-Misc.jpg')

当我尝试运行它时,我得到了这个:

Traceback (most recent call last):
  File "/Users/Documents/Try.py", line 6, in <module>
    os.rename(file, file[4:12] + '-13-Misc.jpg')
OSError: [Errno 2] No such file or directory

我也试过这个:

if fnmatch.fnmatch(file,'MISC*'):
    fun = file[4:12] + '-13-Misc.jpg'
    os.rename(file, fun)

但我得到同样的东西。

它没有将文件识别为文件。我会以错误的方式解决这个问题吗?

4

2 回答 2

9

您需要包含要重命名的文件名的完整路径:

import os
import fnmatch

directory = "/Users/Desktop/TESTME"
for file in os.listdir(directory):
    if fnmatch.fnmatch(file, 'MISC*'):
        path = os.path.join(directory, file)
        target = os.path.join(directory, file[4:12] + '-13-Misc.jpg'
        os.rename(path, target)

os.path.join功能使用适合您平台的正确目录分隔符智能地将路径元素连接成一个整体。

于 2012-07-02T12:53:25.803 回答
1

该函数os.listdir()只返回给定目录中文件的文件名,而不是它们的完整路径。您可以使用它os.path.join(directory, file_name)来重建文件的完整路径。

您也可以在 bash 中执行此操作:

cd /Users/Desktop/TESTME/
for f in MISC*; do mv "$f" "${f:4:8}-13-Misc.jpg"; done
于 2012-07-02T12:53:15.443 回答