我遇到此代码的问题。我正在尝试重命名文件夹中的所有文件名,以便它们不再包含+'s
!这曾经多次使用过,但突然间我得到了错误:
WindowsError: [Error 2] The system cannot find the file specified at line 26
第26行是代码中的最后一行。
有谁知道为什么会这样?我只是承诺有人能在5分钟内做到这一点,因为我有一个代码!惭愧它不起作用!!
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))
答案 0 :(得分:11)
我怀疑您可能遇到子目录问题。
如果您的目录包含文件“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()
yuo告诉重命名查找正确的目录。
修改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
答案 1 :(得分: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('+','_'))
如果您遇到带扩展名的文件,显然,尝试重命名没有扩展名的文件名会导致“找不到文件”错误。