繁体   English   中英

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

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

使用.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM