将文件夹中的所有文件名更改为其他文件名

2024-05-14 06:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

对于python,我正在编写使用os.rename()重命名文件的代码

到目前为止我所拥有的:

[os.rename(f, f.replace('New', '-'))
    for f in os.listdir('.') if not f.startswith('.')]

我要做的是从C:\Users\MyName\Desktop\pythonVSCC:\Users\MyName\Desktop\pythonVSC\forTest并将New的所有情况改为-

forTest中,我有两个.txt文件名NewNew_

我了解.replace做什么,.listdir做什么,.startwith也做什么。你知道吗

我的问题是,如果我将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('forTest')os.listdir('C:\Users\MyName\Desktop\pythonVSC\forTest')和其他任何变体来替换os.listdir('.')

我在这里做什么?你知道吗


Tags: innewforifosnotusersreplace
2条回答

问题是您希望os.listdir()给您一个绝对路径列表,但实际上它只给您文件/目录的名称(basename)。 OTOHos.rename()需要文件的路径。仅将文件名传递给os.rename()的特殊情况只有在当前工作目录与试图重命名的文件相同时才有效。你知道吗

您所引用的文件位于另一个目录中,但是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)))

相关问题 更多 >