如何在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()
你在这里实际上有两个问题。
最大的问题是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 threen"
,并且你打电话给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'))
基本上你所要做的就是去掉这个换行符(以及所有其他的空格,因为你可能不需要它):
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()
使用.strip()。 它会默认删除空白区域。 您还可以添加其他字符(如“ n”)以剥离。 这将留下的话。
链接地址: http://www.djcxy.com/p/55071.html