2014-09-05 41 views
-4

我有一个巨大的文件,我解析的使用正则表达式给出一个txt文件(那样json.dump)类似以下内容:Python的 - 按升序排序在一个txt文件

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

现在我想根据编号以升序排列此文件。 (即“Pdfms”第一,“Tsdsad”第二,“未命名”第三)。我不确定如何在python中启动它,谁能给我一个正确的方向?在此先感谢

+0

为什么你不能使用Python的[JSON(HTTPS: //docs.python.org/2/library/json.html)模块? – GWW 2014-09-05 17:15:35

+0

至少有一个原因:这几乎是JSON,但不完全。至少,在json模块提供帮助之前,需要将其升级为有效的JSON。 – 2014-09-05 17:53:46

回答

2

第一个问题:这不是合法的JSON。您有额外的逗号(JSON不喜欢[a,b,c,];它坚持要求[a,b,c]),并且您有一些标识符(例如name的第三个实例)未被引用。理想情况下,您将改进初始文本文件解析和JSONification来解决这些问题。或者你也可以处理这些链接地址上的苍蝇,像这样:

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) 

这确实就地排序的“东西”阵,由“数量”值,并逆转它(因为你的,你怎么想的例子输出建议降序而不是典型的升序排序)。

为了证明那种做你想要什么,该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}]} 
+0

谢谢。很有帮助! – jaydh 2014-09-06 17:39:09