Bug in Python Renaming Program…No such file or Directory (Fnmatch)

拈花ヽ惹草 提交于 2020-01-10 03:21:53

问题


I'm trying to build a little renaming program to help save me time in the future. Basically it will go through directories I point it too and rename files if they meet certain criteria.

I have written what I need but I have a bug in the very beginning that I can't figure out.

Here is the code:

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')

When I try to run it I am getting this:

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

I also tried this:

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

But I get the same thing.

It's not recognizing the file as a file. Am I going about this the wrong way?


回答1:


You'll need to include the full path to the filenames you are trying to rename:

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)

The os.path.join function intelligently joins path elements into a whole, using the correct directory separator for your platform.




回答2:


The function os.listdir() only returns the file names of the files in the given directory, not their full paths. You can use os.path.join(directory, file_name) to reconstruct the full path of the file.

You could also do this in bash:

cd /Users/Desktop/TESTME/
for f in MISC*; do mv "$f" "${f:4:8}-13-Misc.jpg"; done


来源:https://stackoverflow.com/questions/11294034/bug-in-python-renaming-program-no-such-file-or-directory-fnmatch

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!