如何在python中对文件中的内容进行排序

时间:2013-12-19 21:19:56

标签: python python-2.7

我正在尝试找出一种简单的方法来对文件中的单词进行排序,但是当我打印单词时,总是返回空格“\ 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()

5 个答案:

答案 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
  • 根据用例,您经常需要使用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'))

答案 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),

在你的代码中,我没有看到你正在整理整个文件,只是排序。使用列表保存所有单词,在阅读完文件后,对它们进行排序。