在python中重命名带有特殊字符列表的文件

时间:2016-02-06 23:40:27

标签: python rename

从文件名中删除特殊字符列表的有效方法是什么?我想替换'空格'用'。'和'(',')',' [',']'用' _'。我可以做一个,但我不确定如何重命名多个字符。

import os
import sys
files = os.listdir(os.getcwd())

for f in files:
    os.rename(f, f.replace(' ', '.'))

2 个答案:

答案 0 :(得分:0)

您可以执行for循环检查文件名中的每个字符并替换:

import os
files = os.listdir(os.getcwd())
under_score = ['(',')','[',']'] #Anything to be replaced with '_' put in this list.
dot = [' '] #Anything to be replaced with '.' put in this list.

for f in files:
    copy_f = f
    for char in copy_f:
        if (char in dot): copy_f = copy_f.replace(char, '.')
        if (char in under_score): copy_f = copy_f.replace(char,'_')
    os.rename(f,copy_f)

这方面的诀窍是第二个for循环运行 len(copy_f)次,肯定会替换符合条件的所有字符:) 此外,没有必要进行此导入:

import sys

答案 1 :(得分:0)

此解决方案有效;如果您对效率的要求是避免O(n ^ 2)行为的时间复杂性,那么这应该没问题。

import os

files = os.listdir(os.getcwd())
use_dots = set([' '])
use_underbar = set([')', '(', '[', ']'])

for file in files:
    tmp = []
    for char in file:
        if char in use_dots:
            tmp.append('.')
        elif char in use_underbar: #You added an s here
            tmp.append('_')
        else:
            tmp.append(char)
    new_file_name = ''.join(tmp)
    os.rename(file, new_file_name)

如果你开始使用bytearray,你可以提高效率;这样可以避免“tmp”。列表,并创建一个新的字符串,并在其上进行后续连接。