无法在python中使用此功能

时间:2014-04-15 10:41:02

标签: python python-3.x

任务是编写unique_file函数,该函数将输入文件名和输出文件名作为参数。您的函数应该从输入文件中读取内容并创建一个唯一单词列表 - >基本上意味着在输出文件中不能写入两个或更多相同的单词。我使用的代码是:

def unique_file(input_filename, output_filename):

    file = open(input_filename,"r")
    contents = file.read()
    word_list = contents.split()
    output_file = open(output_filename,'w+')

    for word in word_list:
        if word not in output_file:
            output_file.write(word + '\n')
    file.close()
    output_file.close()
    print('Done')

但是这个函数只是复制从输入文件到输出文件的所有内容。所以我得到像'和' '我'在输出文件中出现多次。

请帮忙。

2 个答案:

答案 0 :(得分:1)

你无法真正检查if word not in output_file:。我建议您使用set来获取独特的字词:

def unique_file(input_filename, output_filename):
    with open(input_filename) as file:
        contents = file.read()
        word_set = set(contents.split())
    with open(output_filename, "w+") as output_file:
        for word in word_set:
            output_file.write(word + '\n')
    print("Done")

请注意使用with处理文件 - 请参阅the docs的最后一段。

答案 1 :(得分:1)

那是因为你不能问一个文件是否包含这样的单词。您必须创建要添加的单词列表。编辑:您实际上应该seen成为set()。成员资格检查的成本低于列表。

def unique_file(input_filename, output_filename):

    file = open(input_filename,"r")
    contents = file.read()
    word_list = contents.split()
    output_file = open(output_filename,'w+')
    seen = set()

    for word in word_list:
        if word not in seen:
            output_file.write(word + '\n')
        seen.add(word)
    file.close()
    output_file.close()
    print('Done')

如果您不需要担心单词的顺序,您可以使用内置set(),这是一个不允许重复的容器。这样的事情应该有效:

def unique_file(input_filename, output_filename):
    with open(input_filename, "r") as inp, open(output_filename, "w") as out:
        out.writelines(set(inp.readlines()))