重命名包含空格的文件名

7

我正在编写一个简单的Python脚本,用于重命名目录中的所有文件,将文件名中的所有空格替换为连字符。我有以下代码,在os.rename处崩溃:

import os

path =  os.getcwd()
filenames = os.listdir(path)

for filename in filenames:
    os.rename(os.path.join(path + filename), os.path.join(path + filename.replace(" ", "-")))

在控制台中会显示错误信息:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
OSError: [Errno 2] No such file or directory

有什么想法是为什么会发生这种情况吗?
2个回答

30

我认为问题在于你在调用os.path.join时语法有误,你要连接的项应该分别作为两个参数提供,并用逗号分隔。以下代码对我有效:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> path  = os.getcwd()
>>> filenames = os.listdir(path)
>>> for filename in filenames:
...     os.rename(os.path.join(path, filename), os.path.join(path, filename.replace(' ', '-')))
...
>>>

15
如果你已经在包含你想重命名的文件的目录中,你就不需要提供绝对路径:
for filename in filenames:
    os.rename(filename, filename.replace(" ", "-"))

1
实际错误在于您没有将参数列表传递给 os.path.join -- 您使用 + 连接了一个字面字符串,而不是传递逗号分隔的列表 -- 但由于这是多余的,因此只需将其删除即可。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接