我有一个名为rootDir
的根目录,位于名为subDir1
,subdir2
等多个子目录下。
所有子目录都包含数百个文件。我想从文件名中删除一些特殊(坏)字符,比如一个字符数组,例如bad_chars = [ '(',')','{','}' ]
。
在Python中有效地执行此操作的优雅方法是什么?
我以为我会使用os.walk()
函数并遍历所有子目录,但我无法真正想出如何做到这一点。
理想情况下,我会有一个这样的函数,它将rootDir
的路径和坏字符数组作为输入:
def(rootDir, bad_chars):
...
答案 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))))