2016-03-21 44 views
-1

我正在尝试编写python代码来读取文件,从内容创建字典,然后检查重复单词的数量。下面的代码是关于每个步骤的注释:将文件读入字典以检查重复字的数量

import string 

# making a dictionary from a paragraph 
def make_dict(s): 
    some_list = s.split() 
    d = dict() 
    for word in some_list:    
     d[word] = 1 + d.get(word,0) 
    print d 
    print 
    print 
    return d 

#Inverse the dictionary 
# swap between key and value 

def invert_dict(s): 
    inverse = {} 
    d = make_dict(s) 
    for key in d: 
     val = d[key] 
     if val not in inverse: 
      inverse[val] = [key] 
     else: 
      inverse[val].append(key) 
    print inverse 
    print 
    print 
    return inverse 


# Reading a file and copying just plain text in other file  
def make_text(): 
    file_name = raw_input('Enter file name: ') 
    fn = open(file_name) 
    for line in fn: 
     line = line.translate(None,"!#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~") 
     line = line.lower() 
     some_text = open('duplicate.txt','a') 
     some_text.write(line) 
     # print some_text 
     some_text.close() 
     fn.close() 
     return some_text 


some_file = make_text() 
some_dict = invert_dict(some_file) 
for key in some_dict: 
    print key , some_dict[key] 
    print 

当我运行代码时,出现以下错误。有人能帮助解释我做错了什么,以及如何解决错误?

Traceback (most recent call last): 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 51, in <module> 
    some_dict = invert_dict(some_file) 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 22, in invert_dict 
    d = make_dict(s) 
    File "C:\Users\KUMAR\Desktop\Python practice\DataStructureSelectionb\string_to_dictionary.py", line 8, in make_dict 
    some_list = s.split() 
AttributeError: 'file' object has no attribute 'split' 

回答

0

make_text函数返回像你似乎期望它已经写入,而不是一个字符串(关闭)的文件对象。也许你想要返回line

目前还不清楚你是否真的想从循环内返回,因为那只会处理用户为你指定的文件的第一行。如果你想阅读整个文件,而不是仅仅一行,我会打电话fn.read()而不是迭代fn(谁的名字有点误导,因为它是一个文件对象,而不只是一个文件名)。或者,您可能希望make_text是一个生成器函数,yield每行(但这需要对其他代码进行重大更改)。