文件夹中的所有更改文件名到别的东西的Python

问题描述 投票:2回答:2

对于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文件名NewNew_

我明白.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')

我在做什么错误吗?

python python-3.x
2个回答
1
投票

你指的是该文件是在另一个目录中,但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)))

1
投票

问题是,你希望os.listdir()给你的绝对路径列表,但它实际上给你只是将文件/显示目录的名称(基名)。 OTOH os.rename()需要的文件的路径。传递文件到os.rename()的只是名称的特殊情况下,如果你当前的工作目录是一样的,你试图重命名文件才有效。

© www.soinside.com 2019 - 2024. All rights reserved.