我正在尝试构建一个小的重命名程序,以帮助我节省未来的时间。 基本上它会遍历我指向它的目录,如果符合某些标准,则重命名文件。
我已经写了我需要的内容,但我一开始就有一个我无法弄清楚的错误。
以下是代码:
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)
但我得到同样的东西。
它无法将文件识别为文件。 我是以错误的方式解决这个问题吗?
答案 0 :(得分:8)
您需要将完整路径包含在您尝试重命名的文件名中:
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
function使用您平台的正确目录分隔符智能地将路径元素连接成一个整体。
答案 1 :(得分: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