2015-11-20 44 views
4

可以說文件系統中有一個文件,其中包含值爲$的預備文件。如何使用Python替換JSON中的值與RegEx在文件中找到的值?

例如

<ul> 
    <li>Name: $name01</li> 
    <li>Age: $age01</li> 
</ul> 

我能夠通過正則表達式來獲得的值:

#!/usr/bin/env python 
import re 

with open("person.html", "r") as html_file: 
    data=html_file.read() 
list_of_strings = re.findall(r'\$[A-Za-z]+[A-Za-z0-9]*', data) 
print list_of_strings 

這將輸出值成一個列表:

[$name01, $age01] 

現在,我送一個JSON樣品載荷到我的網頁。 py這樣的服務器:

curl -H "Content-Type: application/json" -X POST -d '{"name":"Joe", "age":"25"}' http://localhost:8080/myservice 

我是能夠獲得這些值是這樣的:

import re 
import web 
import json 

urls = (
    '/myservice', 'Index', 
) 

class Index: 
    def POST(self): 
     data = json.loads(web.data()) 

     # Obtain JSON values based on specific keys 
     name = data["name"] 
     age = data["age"] 

問題(S):

  1. 我怎樣才能獲得有效載荷反覆的JSON值,並把它們放在一個列表中(而不是手動獲得它們按鍵名稱)?

  2. 一旦我有了這個列表,我該如何用列表中的JSON值替換HTML文件中的值?

例如,

如何手動插入到HTML文件中的這些項目(按照正則表達式EXP這是上面定義的):

替換$ name01有名字嗎?

<ul> 
    <li>Name: Joe</li> 
    <li>Age: 25</li> 
</ul> 

回答

1

凱文關,

感謝您的解決方案,但遺憾的是它沒有工作。

這裏就是我得到了它的工作(數據是JSON內容):

def replace_all(output_file, data): 
    homedir = os.path.expanduser("~") 
    contracts_dir = homedir + "/tmp" 
    with open(output_file, "r") as my_file: 
     contents = my_file.read() 
    destination_file = contracts_dir + "/" + data["filename"] 
    fp = open(destination_file, "w") 
    for key, value in data.iteritems(): 
     contents = contents.replace("$" + str(key), value) 
    fp.write(contents) 
    fp.close() 
1

這是我的方式(也許這裏有一個更好的方式來做到這一點):

import re 
import json 

html = """ 
<ul> 
    <li>Name: $name01</li> 
    <li>Age: $age01</li> 
</ul>""" 

JSON = '{"name01":"Joe", "age01":"25"}' 
data = json.loads(JSON) 

html = re.sub(r'\$(\w+)', lambda m: data[m.group(1)], html) 

print(html) 

輸出:

<ul> 
    <li>Name: Joe</li> 
    <li>Age: 25</li> 
</ul> 

順便說一句,我寧願使用模板類似的Jinja2 。由於我不瞭解web.py,所以我不能舉一個例子。但我發現文檔:http://webpy.org/docs/0.3/templetor

相關問題