Windows错误:[错误 2] 系统找不到指定的文件
我正在尝试把一个文件夹里的所有文件名改掉里面的+
符号!之前这个方法一直都能用,但突然出现了一个错误:
WindowsError: [Error 2] 系统找不到指定的文件,出现在第26行
第26行是代码的最后一行。
有没有人知道为什么会出现这个问题呢?
import os, glob, sys
folder = "C:\\Documents and Settings\\DuffA\\Bureaublad\\Johan\\10G304655_1"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
old = "+"
new = "_"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename:
print (filename)
os.rename(filename, filename.replace(old,new))
2 个回答
4
你正在使用 splitext
这个工具来找出要重命名的文件名:
filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
filename_zero = filename_split[0]#
...
os.rename(filename_zero, filename_zero.replace('+','_'))
如果你遇到一个有后缀名的文件,显然,如果你试图在重命名时去掉这个后缀名,就会出现“找不到文件”的错误。
12
我怀疑你可能在处理子目录时遇到了一些问题。
假设你有一个文件夹,里面有文件"a
"、"b
",还有一个子文件夹"dir
",里面有文件"sub+1
"和"sub+2
"。当你调用os.walk()
时,它会返回以下内容:
(('.',), ('dir',), ('a', 'b'))
(('dir',), (,), ('sub+1', 'sub+2'))
当你处理第二个元组时,你会用rename()
函数调用"'sub+1'
"和"'sub_1'
",但你其实想要的是"'dir\\sub+1'
"和"'dir\\sub_1'
"。
要解决这个问题,你需要把代码中的循环改成:
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
... process file here
这样在你对文件名进行任何操作之前,会把目录和文件名连接起来。
补充:
我觉得上面的说法是对的,但原因不太准确。
假设你在目录里有一个文件"File+1
",os.walk()
会返回:
("C:/Documents and Settings/DuffA/Bureaublad/Johan/10G304655_1/", (,), ("File+1",))
除非你在"10G304655_1
"这个目录下,否则当你调用rename()
时,"File+1
"这个文件在当前目录下是找不到的,因为这和os.walk()
正在查找的目录不一样。通过调用os.path.join()
,你是在告诉rename去正确的目录找文件。
补充 2
所需代码的一个示例可能是:
import os
# Use a raw string, to reduce errors with \ characters.
folder = r"C:\Documents and Settings\DuffA\Bureaublad\Johan\10G304655_1"
old = '+'
new = '_'
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename: # If a '+' in the filename
filename = os.path.join(root, filename) # Get the absolute path to the file.
print (filename)
os.rename(filename, filename.replace(old,new)) # Rename the file