2013-02-05 108 views
1

這是我的文本文件的內容(如:abc.doc):如何刪除逗號,使用正則表達式在python括號?

{'data': [{'name': 'abc'},{'name': 'xyz'}]} 

在Python打開文件後,我如何刪除所有括號,引號和逗號。 最終的輸出應該是:

data: 
name:abc 
name:xyz    
+0

這是否始終是輸入字符串的格式?它可以是'[{'data':[{'name':'abc'},{'name':'xyz'}]}]'? – mgilson

+1

這是我使用facebook圖形API獲得的字符串,我寫入了一個doc文件。所以總是一樣的。 –

+3

不要重新發明輪子!這種格式稱爲JSON,使用* JSON解析*庫。 –

回答

4

使用ast.literal_eval()把它變成一個Python結構,然後打印值:

with open(r'd:\output1.doc', 'r') as inputfile: 
    inputstring = inputfile.read() 

data = ast.literal_eval(inputstring) 
for key, sublist in data.items(): 
    print '{}:'.format(key) 
    for subdict in sublist: 
     for key, value in subdict.items(): 
      print('{}:{}'.format(key, value)) 

爲了您的例子,其結果是:

>>> inputstring = "{'data': [{'name': 'abc'},{'name': 'xyz'}]}" 
>>> import ast 
>>> data = ast.literal_eval(inputstring) 
>>> for key, sublist in data.items(): 
...  print '{}:'.format(key) 
...  for subdict in sublist: 
...   for key, value in subdict.items(): 
...    print '{}:{}'.format(key, value) 
... 
data: 
name:abc 
name:xyz 

但是:如果你從Facebook API獲得這個,那麼你錯誤地轉錄了格式。 Facebook的API給你JSON數據,它採用雙引號("),而不是

{"data": [{"name": "abc"},{"name": "xyz"}]} 

在這種情況下,你應該使用Python自帶的json library

import json 

data = json.loads(inputstring) 
# process the same way as above. 

如果你有一個文件名,你可以要求使用庫從文件中讀取直:

data = json.load(filename) # note, no `s` after `load`. 
+0

如果格式總是相同的,我在這裏沒有看到有任何'ast.literal_eval'錯誤 - 確定它是有效的JSON,你也可以使用它,但是我也沒有看到ast.literal_eval的任何缺點(這個答案實際上顯示瞭如何以OP請求的形式打印數據) – mgilson

+0

實際上,它不是*有效的JSON:* ValueError:期望的屬性名稱:第1行第1列(char 1)*。 –

+0

@MartijnPieters:最有可能是因爲你的直覺說這不是一個有效的JSON看着引用的字符串? :-) – Abhijit

0

看s到我喜歡你有json,可以很容易地使用pyjson解析:現在

import json 
obj=json.loads(u'''{'data': [{'name': 'abc'},{'name': 'xyz'}]}''') 

鮑勃的你大爺的,是嗎?

+0

這不是一個有效的JSON,字符串是單引號 – Abhijit