如何在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
  • 根据用例,您通常希望使用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'))
    

    基本上你所要做的就是去掉这个换行符(以及所有其他的空格,因为你可能不需要它):

    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

    上一篇: How to sort contents in a file in python

    下一篇: Python 2.7.5 installation on Ubuntu, MAXREPEAT