【问题标题】:How do I use a specific line of a text file in python?如何在 python 中使用文本文件的特定行?
【发布时间】:2013-04-15 06:43:11
【问题描述】:

我的文本文件是这样的:

467 119 635 231 234 858
786 463 715 745 729 574 856 806 339 106 487
798 791 392 916 177 115 948 871 525

如您所见,共有三行具有不同的数值。我的任务是对它们进行分类,但只对它们所在的行进行分类。所以基本上,我需要将第一行从小到大排序,然后将第二行从小到大排序,第三行也是如此。

程序指定它需要使用此 .txt 文件中的值。所以我想要做的是一次查看每一行并处理该行,用代码对其进行排序,然后将其放回。

我的问题是:如何让 python 一次只看一行?

我知道这段代码读取的是第一行:

f = open("numbers.txt", "r")
f.readline()

但我正在寻找只返回每一行的东西,这样我就可以使用该特定行的排序代码。

澄清:我不是在寻求排序方面的帮助,我只是想弄清楚如何一次单独查看每一行。

【问题讨论】:

    标签: python file text readline


    【解决方案1】:
    for line in f:
        nums = map(int, line.split())
        # looks at one line at a time, you can sort it now
    

    如果你想一次性加载它们

    nums = [map(int, line.split()) for line in f]
    

    现在您可以像nums[0]nums[1] 一样访问它,每个单独的行。

    【讨论】:

    • 是的,我已经尝试过了,但是说我需要将该行设置为一个变量,这样我就可以开始弄乱它的内容了。 for 循环所做的只是循环 3 次文本,直到所有 3 行都被发布!
    • 好的,但假设您打印 nums[0]。这将打印每行中的第一个数字。我试图达到 nums[0] (或任何其他变量)只会显示第一行,然后 nums[1] (或其他东西)将显示第二行的地步。也许我只是没有看到自己调用线路的正确方法?
    • @Wes 所以你希望文件中的所有数字一次加载到nums?当你一次说一行时,我的印象不是这样,但我会相应地更新
    • 这更符合我的想法。谢谢!很抱歉让您如此困惑。
    【解决方案2】:

    这是一个可以做你想做的事情的函数。只需给它文件的路径,剩下的就交给它了。

    注意:它是一个生成器。

    def read_sort(file_path):
        with open(file_path) as f:
            for line in f:
                yield sorted(map(int, line.split()))
    
    
    print list(read_sort(__path_to_file__)
    

    【讨论】:

    • 你忘了把它转换成ints 所以'10' 小于'2' 例如
    • 我真的只是想弄清楚我遇到的这个具体问题,因为实际的分配(排序)比我说的要复杂得多,它涉及基数排序等等。
    猜你喜欢
    • 2016-06-29
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多