你实际上有两个问题。
最大的问题是print sorted(file_handle)读取并排序文件的其余部分,然后打印出来。你每行一次。所以,结果是你读了第一行,分割它,忽略结果,排序并打印第一行之后的所有行,然后就完成了。
你想做的是在你进行的过程中积累所有的单词,然后分类并打印出来。像这样:def sorting(self):
filename = ("food.txt")
file_handle = open(filename, "r")
words = []
for line in file_handle:
words += line.split()
file_handle.close()
print sorted(words)
或者,如果要一次打印一行排序的列表,而不是作为一个大列表,请将最后一行更改为:print '\n'.sorted(words)
对于第二个更小的问题,也就是你问的那个问题,你只需要从换行符中strip。因此,将words +=行改为:words += line.strip().split()
然而,如果你解决了第一个问题,你甚至不会注意到这个问题。如果你有一条像"one two three\n"这样的线,并且你在它上面调用split(),你将得到["one", "two", "three"],而不需要担心\n。所以,你甚至不需要用eem来解决这个问题。
在我们的工作中,您还可以在这里做一些其他改进:使用with语句关闭文件,而不是手动执行。
将这个函数return设为单词列表(这样您就可以用它做各种不同的事情,而不是只打印它而不返回任何内容)。
将文件名作为参数,而不是硬编码(以获得类似的灵活性)。
也许可以把循环转化为理解,但这需要一个额外的“扁平化”步骤,所以我不确定它是否值得。
如果不需要重复的单词,请使用set,而不是list。
根据用例的不同,您通常希望使用rstrip()或rstrip('\n')来删除后面的换行符,同时保留段落缩进选项卡或空格。但是,如果你在寻找个别的词,你可能不想要。
您可能需要过滤掉和/或拆分非字母字符,这样就不会将"that."作为一个单词。即使是这种基本的自然语言处理也是非常重要的,所以这里不举一个例子。(例如,您可能希望"John's"是一个单词,您可能希望"jack-o-lantern"是一个单词而不是三个;您几乎肯定不希望"two-three"是一个单词…)
self参数只在类的方法中需要。这似乎不在任何班级。(如果是的话,它不会对self做任何事情,因此没有可见的原因使它在类中。当然,您可能有一些在您的大型程序中可见的原因。)
所以,无论如何:def sorting(filename):
words = []
with open(filename) as file_handle:
for line in file_handle:
words += line.split()
return sorted(words)
print '\n'.join(sorting('food.txt'))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/108177.html