| import pandas as pd | |
| from jinja2 import Template | |
| # Read the CSV file | |
| df = pd.read_csv('sample_data.csv') | |
| # Calculate column totals (excluding the first column which contains row labels) | |
| totals = df.iloc[:, 1:].sum() | |
| # Create HTML template | |
| 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> | |
| """ | |
| # Convert the raw data to HTML | |
| raw_data_html = df.to_html(index=False, classes='table') | |
| # Create the template and render it | |
| template = Template(html_template) | |
| html_output = template.render(raw_data=raw_data_html, totals=totals) | |
| # Save the HTML output | |
| with open('report.html', 'w') as f: | |
| f.write(html_output) | |
| print("Report has been generated as 'report.html'") |