[英]How to sort contents in a file in python
我试图找出一种简单的方法来对文件中的单词进行排序,但是当我打印单词时,总是返回空格“\\ n”。 我如何改进此代码以使其正常工作? 我正在使用python 2.7提前谢谢。
def sorting(self):
filename = ("food.txt")
file_handle = open(filename, "r")
for word in file_handle:
word = word.split()
print sorted(file_handle)
file_handle.close()
基本上你所要做的就是剥离换行符(以及所有其他空格,因为你可能不需要它):
def sorting(self):
filename = ("food.txt")
file_handle = open(filename, "r")
for line in file_handle:
word = line.strip().split()
print sorted(file_handle)
file_handle.close()
否则你可以用line[:-1].split()
删除最后一个字符line[:-1].split()
你实际上有两个问题。
最重要的是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 +=
line更改为:
words += line.strip().split()
但是,如果你已经解决了第一个问题,你甚至都不会注意到这个问题。 如果你有一个像"one two three\\n"
,你在它上面调用split()
,你将得到["one", "two", "three"]
,没有\\n
担心。 所以,你实际上甚至不需要解决这个问题。
虽然我们正在努力,但您可以在此处进行一些其他改进:
with
语句关闭文件而不是手动执行。 return
单词列表(这样你就可以用它做各种不同的事情,而不是只打印它而不返回任何内容)。 set
而不是list
。 "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'))
使用.strip()。 它默认会删除空格。 您还可以添加其他字符(例如“\\ n”)以进行剥离。 这只会留下一些文字。
尝试这个:
def sorting(self):
words = []
with open("food.txt") as f:
for line in f:
words.extend(line.split())
return sorted(words, key=lambda word: word.lower())
为了避免打印刚刚放入的新行,最后:
打印排序(file_handle),
在你的代码中,我没有看到你正在整理整个文件,只是排序。 使用列表保存所有单词,并在阅读完文件后对其进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.