我正在尝试找出一种简单的方法来对文件中的单词进行排序,但是当我打印单词时,总是返回空格“\ 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()
答案 0 :(得分:2)
基本上你所要做的就是剥离换行符(以及所有其他空格,因为你可能不想要它):
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()
答案 1 :(得分:2)
你实际上有两个问题。
最重要的是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
。所以,你实际上甚至不需要 来解决这个问题。
虽然我们正在努力,但您可以在此处进行一些其他改进:
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'))
答案 2 :(得分:0)
使用.strip()。它默认会删除空格。您还可以添加其他字符(例如“\ n”)以进行剥离。这只会留下一些文字。
答案 3 :(得分:0)
试试这个:
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())
答案 4 :(得分:-1)
为了避免打印刚放入的新行,最后:
print sorted(file_handle),
在你的代码中,我没有看到你正在整理整个文件,只是排序。使用列表保存所有单词,在阅读完文件后,对它们进行排序。