如何删除多个文件名中的所有空格?

How remove all whitespace in multiple filenames?

我是 Python 的新手。我正在将 evtx 日志文件转换为 xml,但是,某些 evtx 文件的名称中包含白色 space,并且在文件转换开始时出现错误。 其中一个解决方案是手动删除evtx文件名中的所有白色space,但是当你处理大量文件时这是不可能的。

我需要从多个目录中的文件名中删除所有白色space。我试图通过使用 .replace(" ","") 删除白色 space 来重命名文件,但是,我不断收到错误消息:

FileNotFoundError: [Errno 2] No such file or directory:

代码:

dir_path = '/home/user/evtx_logs'

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        new_filename = f.replace(" ","")
        os.rename(f,new_filename)

是否有任何其他方法可以重命名或忽略文件名中的白色 space?

解决方案

dir_path = '/home/user/evtx_logs' 

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        new_filename = f.replace(" ","")
        os.rename(os.path.join(dirpath, f), os.path.join(dirpath, new_filename))

您需要向 os.rename 提供 full path 才能进行重命名。

这里

os.path.join(dirpath, new_filename)

dirpath 或 dirnames,不确切知道:

os.path.join(dirnames, new_filename)

尝试打印出目录遍历的值。您会注意到文件名不是路径,它们只是文件的名称。当您尝试重命名该文件时,您需要将您的函数指向整个路径。像这样:

for dirpath, dirnames, filenames in os.walk(dir_path):
    for f in filenames:
        filepath = os.path.join(dirpath, f)
        new_filename = f.replace(" ","")
        new_filepath = os.path.join(dirpath, new_filename)
        os.rename(filepath, new_filepath)