2016-11-19 48 views
1

我正在使用以下函數從文件名中刪除數字。什麼是替代str.translate在python 3?

import os 

def rename_files(): 
    file_list = os.listdir(r"C:\Users\X\Downloads\Compressed\prank\prank") 
## print(file_list) 
    os.chdir(r"C:\Users\X\Downloads\Compressed\prank\prank") 
    print(os.getcwd()) 
    for file_name in file_list: 
     os.rename(file_name, file_name.translate(None, "1234567890"))   

rename_files() 

它在Python 2中完美工作,但在Python 3中,它會引發以下錯誤。

Traceback (most recent call last): 
    File "C:\Python34\rename_files.py", line 11, in <module> 
    rename_files() 
    File "C:\Python34\rename_files.py", line 9, in rename_files 
    os.rename(file_name, file_name.translate(None, "1234567890")) 
TypeError: translate() takes exactly one argument (2 given) 

如何解決這個問題,而不使用正則表達式。

回答

1

str.translate仍然存在於Python 3中,它的使用方式不同(儘管它與Py2中的unicode.translate匹配)。 maketrans現在是一個str(和bytes)的靜態方法,並且str.maketrans的字符刪除通過用於轉換的相同查找表進行處理。

對於你的情況,一次達陣,你會怎麼做:

file_name.translate(deletedigits) 

注意,還有其他的方法來做到這一點,如:

deletedigits = str.maketrans(dict.fromkeys("1234567890")) 

然後進行翻譯

# ifilterfalse on Py2 
''.join(itertools.filterfalse(str.isdigit, file_name)) 

或:

''.join(let for let in file_name if not let.isdigit()) 
+0

您可以使用如下: 進口重新 進口水珠 file_path_list = glob.glob(「d:\ *」) #Here我們在給定的目錄中獲取列表的所有文件,還可以指定讓特定類型.html或.xls #eg。您可以編寫以獲取html文件來替換html文件名,僅針對file_path_list中的Fpath: dir = os.path.dirname(Fpath) fname = Fpath.strip(dir) name = os.path.splitext(fname) fn = re.sub('[\ d]','',name [0]) os.rename(Fpath,dir + fn +名稱[1]) –