2016-02-06 86 views
0

什麼是從文件名中移除特殊字符列表的有效方法?我想用''替換'空格'。與 '_'。我可以做一個,但我不知道如何重命名多個字符。用python中的特殊字符列表重命名文件

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

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

看看:http://stackoverflow.com/questions/3411771/multiple-character-replace-with-python(和其他人) – Stidgeon

+1

http://stackoverflow.com/questions/16720541/python-string- replace-regular-expression將指向're.sub',這將允許您使用正則表達式。 – SteveTurczyn

回答

0

您可以爲循環,檢查文件名的每個字符和替換做:

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 
+0

你可以通過執行'os.rename(f,copy_f.replace('','。'))'# –

+0

@ l'L來消除第一個'if'從句,想要添加更多的字符。 – abe

+0

@ l'L'l查看我更新的答案。如果你喜歡,可以投票:D – abe

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'列表,並創建一個新的字符串與隨後的連接。