对于Python,我写代码,使用os.rename()
重命名文件
我到目前为止有:
[os.rename(f, f.replace('New', '-'))
for f in os.listdir('.') if not f.startswith('.')]
我所试图做的是从C:\Users\MyName\Desktop\pythonVSC
寻找到C:\Users\MyName\Desktop\pythonVSC\forTest
和改变New
的所有情况下-
在forTest
我有两个.txt
文件名New
和New_
我明白.replace
做什么.listdir
确实也.startwith
一样。
我的问题是,如果我改变'.'
的os.listdir('.')
如下所示for语句来'./somePath'
我得到的错误
Exception has occurred: FileNotFoundError
[WinError 2] The system cannot find the file specified: 'New.txt' -> '-.txt'
File "C:\Users\MyName\Desktop\pythonVSC\rename.py", line 29, in <listcomp>
[os.rename(f, f.replace('New', '-')) for f in os.listdir('./forTest') if not f.startswith('.')]
File "C:\Users\MyName\Desktop\pythonVSC\rename.py", line 29, in <module>
[os.rename(f, f.replace('New', '-')) for f in os.listdir('./forTest') if not f.startswith('.')]
我试着用os.listdir('.')
,os.listdir('forTest')
以及任何其他变化更换os.listdir('C:\Users\MyName\Desktop\pythonVSC\forTest')
我在做什么错误吗?
你指的是该文件是在另一个目录中,但os.rename
不知道。
最简单的解决方法就是改变到其他目录:
os.chdir('./forTest')
[os.rename(f, f.replace('New', '-')) for f in os.listdir('.') if not f.startswith('.')]
或者,干脆少,传递的完整路径:
dirname = './forTest'
for f in os.listdir(dirname):
if f.startswith('.'):
continue
f_new = f.replace('New', '-')
os.rename(*(os.path.join(dirname, fname) for fname in (f, f_new)))
问题是,你希望os.listdir()
给你的绝对路径列表,但它实际上给你只是将文件/显示目录的名称(基名)。 OTOH os.rename()
需要的文件的路径。传递文件到os.rename()
的只是名称的特殊情况下,如果你当前的工作目录是一样的,你试图重命名文件才有效。