2016-11-19 16 views
1

次の関数を使用して、ファイル名から数値を削除しています。python 3でstr.translateに代わるものは何ですか?

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の文字の削除は、翻訳のために同じルックアップテーブルの使用によって処理されます。あなたのケースでは

、あなたがしたいフロントまで1時間:

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

、その後はと翻訳を実行します。

file_name.translate(deletedigits) 

例えば、これを達成するために、他の方法があることに注意してください、:

# 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。 file = path_list内のFpathには、 : dir = os.path.dirname(Fpath) fnameのhtmlファイル名のみを置き換えるhtmlファイルを作成することができます。 = Fpath.strip(dir) 名前= os.path.splitext(fname) fn = re.sub( '[\ d]'、 ''、name [0]) os.rename(Fpath、dir + fn +名前[1]) –

関連する問題