从Python中的多个子目录中的文件名中删除特殊字符

时间:2015-10-23 10:18:39

标签: python batch-rename

我有一个名为rootDir的根目录,位于名为subDir1subdir2等多个子目录下。

所有子目录都包含数百个文件。我想从文件名中删除一些特殊(坏)字符,比如一个字符数组,例如bad_chars = [ '(',')','{','}' ]

在Python中有效地执行此操作的优雅方法是什么?

我以为我会使用os.walk()函数并遍历所有子目录,但我无法真正想出如何做到这一点。

理想情况下,我会有一个这样的函数,它将rootDir的路径和坏字符数组作为输入:

def(rootDir, bad_chars):
    ...

2 个答案:

答案 0 :(得分:4)

使用<Window x:Class="TimeSpanBug.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" Height="100" Width="200"> <StackPanel> <!-- Bind both to the same TimeSpan property in the ViewModel --> <xctk:TimeSpanUpDown Value="{Binding TimeSpan}"/> <xctk:TimeSpanUpDown Value="{Binding TimeSpan}"/> </StackPanel> </Window> 是一种合理的方法。

但是,您需要稍微改进一下您的规格:

  • 是否要重命名目录文件,或仅重命名文件? (例如,将os.walk作为要移除的字符,您对路径'('做了什么?文件名很好,但目录名有一个坏字符。 )

  • 如果重命名文件(或目录)会导致冲突,您会怎么做?例如,假设您找到一个名为'this(/that'的文件,但是已经有一个名为'this('的文件(没有括号)?

除了这两个问题之外,the method Hackaholic just posted看起来还不错。

答案 1 :(得分:2)

如您所述,您可以使用os.walk

for dir, subdir, files in os.walk(path):
    for file in files:
        os.rename(os.path.join(dir,file), os.path.join(dir, "".join(filter(lambda x:x not in bad_chars, file))))