|
import pandas as pd |
|
from jinja2 import Template |
|
|
|
|
|
df = pd.read_csv('sample_data.csv') |
|
|
|
|
|
totals = df.iloc[:, 1:].sum() |
|
|
|
|
|
html_template = """ |
|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<title>CSV Data Report</title> |
|
<style> |
|
body { |
|
font-family: Arial, sans-serif; |
|
margin: 20px; |
|
} |
|
table { |
|
border-collapse: collapse; |
|
width: 100%; |
|
margin-bottom: 20px; |
|
} |
|
th, td { |
|
border: 1px solid #ddd; |
|
padding: 8px; |
|
text-align: right; |
|
} |
|
th { |
|
background-color: #f2f2f2; |
|
} |
|
.total-row { |
|
font-weight: bold; |
|
background-color: #e6e6e6; |
|
} |
|
h1 { |
|
color: #333; |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
<h1>CSV Data Report</h1> |
|
|
|
<h2>Raw Data</h2> |
|
{{ raw_data | safe }} |
|
|
|
<h2>Column Totals</h2> |
|
<table> |
|
<tr> |
|
{% for column in totals.index %} |
|
<th>{{ column }}</th> |
|
{% endfor %} |
|
</tr> |
|
<tr class="total-row"> |
|
{% for value in totals.values %} |
|
<td>{{ "{:,.2f}".format(value) }}</td> |
|
{% endfor %} |
|
</tr> |
|
</table> |
|
</body> |
|
</html> |
|
""" |
|
|
|
|
|
raw_data_html = df.to_html(index=False, classes='table') |
|
|
|
|
|
template = Template(html_template) |
|
html_output = template.render(raw_data=raw_data_html, totals=totals) |
|
|
|
|
|
with open('report.html', 'w') as f: |
|
f.write(html_output) |
|
|
|
print("Report has been generated as 'report.html'") |