任务是编写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')
但是这个函数只是复制从输入文件到输出文件的所有内容。所以我得到像'和' '我'在输出文件中出现多次。
请帮忙。
答案 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()))