2014-09-05 114 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

相關問題