【问题标题】:Python: How do you sort the contents of a .txt file in numerical order? [duplicate]Python:如何按数字顺序对 .txt 文件的内容进行排序? [复制]
【发布时间】:2015-12-26 07:11:00
【问题描述】:

我在编写按数字顺序排列 .txt 文件的代码时遇到了一些麻烦。

我遇到的问题是在 .txt 文件中订购数字 77、45、85、100 时,它会将其订购为 100、45、77、85; 100 是最低的。

不知道如何纠正,因为我希望 100 是最高的。

这是我目前所拥有的:

import csv
import operator


sample = open("score.txt")
csv1 = csv.reader(sample, delimiter=',')
sort = sorted(csv1, key=operator.itemgetter(1))
for eachline in sort:
    print eachline

【问题讨论】:

  • 我认为您需要将文本转换为浮点数或整数。它以一种意想不到的方式排序,因为它们是字符串。
  • 你能发布一个 csv 文件的小样本吗?
  • 你需要澄清一下。你在排序一堆整数吗?还是看起来像这样的东西:bar3、bar15xyz、bar 32、foo1、foo2、foo10、foo23、foo103。如果是后者,您想要的是自然顺序排序。
  • 有关自然顺序排序和快速 Python 实现的咆哮,请参阅:blog.codinghorror.com/sorting-for-humans-natural-sort-order

标签: python sorting numeric


【解决方案1】:

您需要按数字而不是字母顺序对它们进行排序。

试试这个:

sort = sorted(csv1, key=lambda item: int(item[1]))

【讨论】:

    【解决方案2】:

    就像 budder 所说,尝试将您的元素转换为 intfloat。假设您正在使用整数,您可以在 sorted() 函数中更改您的 key

    sort = sorted(csv1, key=lambda x : int(x[1]))
    

    【讨论】:

      【解决方案3】:

      条目需要先转换为整数才能正确排序。

      score.txt

      312
      148
      17
      108
      

      蟒蛇

      with open('score.txt', 'r') as f:
          lines = f.readlines()
      numbers = [int(e.strip()) for e in lines]
      numbers.sort()
      print numbers
      
      #[17, 108, 148, 312]
      

      【讨论】:

        猜你喜欢
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多