2012-02-06 7 views
0

Python 2.7.2でうまく動作するプログラムをPython 3.1.4に変換しようとしています。strオブジェクトが呼び出せない

私は

TypeError: Str object not callable for the following code on the line "for line in lines:" 

コード取得しています:私はあなたの診断が間違っていると思う

in_file = "INPUT.txt" 
out_file = "OUTPUT.txt" 

##The following code removes creates frequencies of words 

# create list of lower case words, \s+ --> match any whitespace(s) 
d1=defaultdict(int) 
f1 = open(in_file,'r') 
lines = map(str.strip(' '),map(str.lower,f1.readlines())) 
f1.close()   
for line in lines: 
    s = re.sub(r'[0-9#$?*><@\(\)&;:,.!-+%=\[\]\-\/\^]', " ", line) 
    s = s.replace('\t',' ') 
    word_list = re.split('\s+',s) 
    unique_word_list = [word for word in word_list] 
    for word in unique_word_list: 
     if re.search(r"\b"+word+r"\b",s): 
      if len(word)>1: 
       d1[word]+=1 

答えて

6

あなたは、その最初の引数として呼び出し可能を期待マッピングする最初の引数として文字列を渡している:

lines = map(str.strip(' '),map(str.lower,f1.readlines())) 

私はあなたが次のことをしたいと思う:

呼び出します
lines = map(lambda x: x.strip(' '), map(str.lower, f1.readlines())) 

へのもう1つの呼び出しの結果の各文字列のstrip

また、変数名にはstrを使用しないでください。これは組み込み関数の名前です。

6

を。エラーは、実際には次の行で発生します:

lines = map(str.strip(' '),map(str.lower,f1.readlines())) 

私の推薦は次のようにコードを変更するには、次のようになります。

in_file = "INPUT.txt" 
out_file = "OUTPUT.txt" 

##The following code removes creates frequencies of words 

# create list of lower case words, \s+ --> match any whitespace(s) 
d1=defaultdict(int) 
with open(in_file,'r') as f1: 
    for line in f1: 
     line = line.strip().lower() 
     ... 

with文を使用し、ファイルの反復処理、そしてどのように注意してください。 strip()lower()がループの本体の内側に移動しました。

関連する問題