1. ホーム
  2. python

[解決済み] Python AttributeError: モジュール 'string' には 'maketrans' という属性がありません。

2022-02-28 17:51:36

質問

Python 3.5.2のシェルでコマンドを実行しようとすると、以下のエラーが表示されます。

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit      
(Intel)] on win32 Type "copyright", "credits" or "license()" for more information.

>>> folder = 'C:/users/kdotz/desktop'
>>> f = open(folder + '/genesis.txt', 'r')
>>> import operator, time, string
>>> start=time.time()
>>> genesis = {}
>>> for line in f:
line=line.split()
for word in line:
    word = word.lower()
    new_word=word.translate(string.maketrans("",""), string.punctutation)
    if new_word in genesis:
        genesis[new_word]+=1
    else:
        genesis[new_word]=1

エラーです。

Traceback (most recent call last):
  File "<pyshell#15>", line 5, in <module>
new_word=word.translate(string.maketrans("",""), string.punctutation)
AttributeError: module 'string' has no attribute 'maketrans'

何が間違っているのでしょうか?私はコードの先頭で文字列をインポートしています。助けてくれてありがとうございます。

解決方法は?

maketrans は非推奨となり、新しい静的メソッドが採用されました。

string.maketrans() 関数は非推奨となり、新しい静的メソッドに置き換わります。 bytes.maketrans() bytearray.maketrans() . この変更により、どの型が string モジュールがあります。現在は str , bytes および bytearray はそれぞれ maketranstranslate メソッドに、適切な型の中間変換テーブルを追加します。

を使用することができます。 dir() このような問題が発生した場合は、いつでも検証することができます。

>>> import string
>>>
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
>>>

ご覧の通り maketrans を、上記の結果リストに追加しました。