Python - 在txt文件中按升序排序

-4 投票
1 回答
633 浏览
提问于 2025-04-20 01:43

我有一个很大的文档,我用正则表达式把它处理成了一个文本文件(json.dump),格式大致如下:

{
    "stuff": [
        {
            "name": [
                "frfer", 
                "niddsi", 
            ], 
            "number": 11300, 
            "identifier": "Tsdsad"
        }, 
        {
            "name": [
                "Fast", 
                "Guard", 
                "Named", 
            ], 
            "number": 117900, 
            "identifier": "Pdfms"
        }, 
        {
            name: [
                "Fast", 
            ], 
            "number": 660, 
            "identifier": "Unnamed"
        },    
    ]
}    

现在我想根据数字的大小,把这个文档按升序排列(也就是说,"Pdfms"排第一,"Tsdsad"排第二,"Unnamed"排第三)。我不知道该怎么在Python中开始做这个,有没有人能给我一些建议?谢谢!

1 个回答

2

第一个问题:你提供的不是合法的JSON格式。里面有多余的逗号(JSON不喜欢像[a,b,c,]这样的格式,它要求是[a,b,c]),还有一些标识符(比如第三个name)没有加引号。理想情况下,你应该改进一下最初的文本文件解析和JSON转换,来解决这些问题。或者你也可以在处理时临时修复这些问题,像这样:

json_source = """
    ... your text data from above ...
"""

import re
BADCOMMA = re.compile(r',\s+\]')
json_source = BADCOMMA.sub(']', json_source)

BADIDENTIFIER = re.compile(r'\s+name:\s*')
json_source = BADIDENTIFIER.sub('"name":', json_source)

需要注意的是,假设你能在处理时修复所有可能的问题是一种脆弱的做法。通过正则表达式编辑结构化数据文件也是如此。最好是从一开始就生成正确的JSON格式。

接下来,如何进行排序:

import json
data = json.loads(json_source)

data['stuff'].sort(key=lambda item: item['number'], reverse=True)

这段代码会对“stuff”数组进行原地排序,按照“number”值进行排序,并且是反向排序(因为你提供的输出示例显示你想要的是降序,而不是通常的升序)。

为了证明排序达到了你想要的效果,pprint模块会很有用:

from pprint import pprint
pprint(data)

结果是:

{u'stuff': [{u'identifier': u'Pdfms',
             u'name': [u'Fast', u'Guard', u'Named'],
             u'number': 117900},
            {u'identifier': u'Tsdsad',
             u'name': [u'frfer', u'niddsi'],
             u'number': 11300},
            {u'identifier': u'Unnamed', u'name': [u'Fast'], u'number': 660}]}

撰写回答