1

所以我在文件(数千行)input.txt中有以下输出

2956:1 1076:1 4118:1 1378:1 2561:1 
1039:1 1662:1
1948:1 894:1 1797:1 1662:1

问题是我需要让每一行按升序排序

所需输出:output.txt

1076:1 1378:1 2561:1 2956:1 4118:1
1039:1 1662:1
894:1 1662:1 1797:1 1948:1

这正在成为一个真正的挑战,我正在寻找一个 python 函数来为我做这件事。这些行必须保持它们所在的顺序,但每行必须按升序排序(就像输出一样)。

关于如何做到这一点的任何想法?

4

3 回答 3

11
with open('input.txt') as f, open('output.txt', 'w') as out:
    for line in f:
        line = line.split()  #splits the line on whitespaces and returns a list
        #sort the list based on the integer value of the item on the left side of the `:`
        line.sort(key = lambda x: int(x.split(':')[0]))
        out.write(" ".join(line) + '\n')

输出:

1076:1 1378:1 2561:1 2956:1 4118:1
1039:1 1662:1
894:1 1662:1 1797:1 1948:1
于 2013-06-04T13:40:52.180 回答
2

不确定python,但一般来说,我会将每一行作为“记录”,然后将该行“分解”成一个由空格分隔的数组(或正则表达式一组空格或制表符,或任何分隔符),然后是一个简单的数组排序,然后“内爆”回一个字符串。

我的“引号”相当于 PHP 函数。

于 2013-06-04T13:41:09.477 回答
1

一种方法是这样的:

def sort_input(input_file):
  for line in input_file:
    nums = line.strip().split()
    nums.sort(key=lambda x: int(x.split(':')[0]))
    print ' '.join(nums)
于 2013-06-04T13:47:16.187 回答