[英]data dictionary to html table
我有以下數據字典,我想將其轉換為HTML表-嘗試了不同的方法,但沒有成功。
data = {'102 Not Out': "('75', '04 May 2018'),N/A",'2.0': "('84', 'Expected in January 2019'),8.5",'3 Dev': "('0', '11 May 2018'),No IMDB Info Available",'Adityam': "('34', '27 April 2018'),No IMDB Info Available"}
這是我到目前為止所擁有的
message ='<table><tr><th>Movies</th><th>Release Date</th><th>Rating</th><th>IMDB Rating</th></tr>'
message += '<tr><td>' + '</td><td>'.join(data.keys()) + '</td></tr>'
message += '</table>'
這是我正在尋找的輸出:
+-------------+--------------------------+--------+------------------------+--+
| Movies | Release Date | Rating | IMDB Rating | |
+-------------+--------------------------+--------+------------------------+--+
| 102 Not Out | 04 May 2018 | 75 | N/A | |
+-------------+--------------------------+--------+------------------------+--+
| 2.0 | Expected in January 2019 | 84 | 8.5 | |
+-------------+--------------------------+--------+------------------------+--+
| 3 Dev | 11 May 2018 | 0 | No IMDB Info Available | |
+-------------+--------------------------+--------+------------------------+--+
| Adityam | 27 April 2018 | 34 | No IMDB Info Available | |
+-------------+--------------------------+--------+------------------------+--+
使用Python 3 - literal_eval()
和.items()
您的值包含一個tuple
和一個str
。 因此,您需要將其拆分。
所以應該像:
from ast import literal_eval
for key, value in data.items():
message += '<tr>'
values = value.split(',')
t = literal_eval(','.join(values[:2])) # tuple
message += """
<td>{}</td><td>{}</td><td>{}</td><td>{}</td>
""".format(key, t[0], t[1], values[2])
message += '</tr>'
102 Not Out 75 04 May 2018 N/A
2.0 84 Expected in January 2019 8.5
3 Dev 0 11 May 2018 No IMDB Info Available
Adityam 34 27 April 2018 No IMDB Info Available
您可以使用re
和dict.items
:
import re
import ast
message ='<table><tr><th>Movies</th><th>Release Date</th><th>Rating</th><th>IMDB Rating</th></tr>{}</table>'
data = {'102 Not Out': "('75', '04 May 2018'),N/A",'2.0': "('84', 'Expected in January 2019'),8.5",'3 Dev': "('0', '11 May 2018'),No IMDB Info Available",'Adityam': "('34', '27 April 2018'),No IMDB Info Available"}
new_data = '\n'.join('<tr>{}</tr>'.format('\n'.join(c.format(d) for c, d in zip(['<td>{}</td>']*4, [a]+list(ast.literal_eval(re.findall('\(.*?\)', b)[0])[::-1])+[re.findall('(?=\),)[\w\W]+', b)[0][2:]]))) for a, b in data.items())
last_result = message.format(new_data)
with open('movie_listings.html', 'w') as f:
f.write(last_result)
輸出:
但是,使用flask
可以輕松完成此任務。 首先,創建一個類以更好地構造data
:
import ast
import re
from collections import namedtuple
class MovieData:
def __init__(self, data):
self.final_data = [[a]+list(ast.literal_eval(re.findall('\(.*?\)', b)[0])[::-1])+[re.findall('(?=\),)[\w\W]+', b)[0][2:]])) for a, b in data.items()]
def __iter__(self):
movie = namedtuple('movie', ['name', 'release', 'rating', 'imbd'])
for i in self.final_data:
yield movie(*i)
然后,以HTML( movie_listing.html
)創建模板:
<html>
<body>
<table>
<thead>
<tr>
<th>Movies</th>
<th>Release Date</th>
<th>Rating</th>
<th scope="col">IMDB Rating</th>
</tr>
</thead>
<tbody>
{%for movie in movie_data%}
<tr>
<td>{{movie.name}}</td>
<td>{{movie.release}}</td>
<td>{{movie.rating}}</td>
<td>{{movie.imbd}}</td>
</tr>
{%endfor%}
</tbody>
</table>
</body>
</html>
最后,創建並運行該應用程序:
import flask
app = flask.Flask(__name__)
@app.route('/')
def get_html():
data = {'Adityam': "('34', '27 April 2018'),No IMDB Info Available", '3 Dev': "('0', '11 May 2018'),No IMDB Info Available", '102 Not Out': "('75', '04 May 2018'),N/A", '2.0': "('84', 'Expected in January 2019'),8.5"}
return flask.render_template('movie_listing.html', movie_data = MovieData(data))
if __name__ == '__main__':
app.debug = True
app.run()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.