Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alex-au1/pyreporter
A Python reporting API that helps with reading and writing tabular data to/from different formats like Excel, SQL tables, etc...
https://github.com/alex-au1/pyreporter
excel pandas python3
Last synced: 14 days ago
JSON representation
A Python reporting API that helps with reading and writing tabular data to/from different formats like Excel, SQL tables, etc...
- Host: GitHub
- URL: https://github.com/alex-au1/pyreporter
- Owner: Alex-Au1
- License: mit
- Created: 2022-12-29T02:47:42.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-01-04T23:18:27.000Z (about 2 years ago)
- Last Synced: 2024-12-17T19:10:10.738Z (19 days ago)
- Topics: excel, pandas, python3
- Language: Python
- Homepage:
- Size: 160 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# [PyReporter](https://github.com/Alex-Au1/PyReporter)
[![PyPI](https://img.shields.io/pypi/v/PyReporter)](https://pypi.org/project/PyReporter)A Python reporting API that helps with reading and writing tabular data to/from different formats like Excel, SQL tables, etc...
## Install
### Using Pip:
```bash
pip install -U PyReporter
```## Examples
For more examples, you can go [here](https://github.com/Alex-Au1/PyReporter/tree/main/examples).#### Writing tables to different sheets in an Excel file
```python
import pandas as pd
import Reporter as rpview = rp.ReportSubject()
view.attach(rp.ExcelObserver())
data = pd.DataFrame({"col1": [1, 2], "col2": [3, 4]})
data2 = pd.DataFrame({"a": ["cell 1", "cell 2"], "b": ["cell 3", "cell 4"]})
data3 = pd.DataFrame({"catalan": [1, 1, 2, 5, 14, 42, 132]})# output the number of tables indicated by the sheet name
view.notify(rp.ExcelExportEvent({"Sheet With 1 Table": [rp.ExcelDf(data)],
"Sheet With 2 Tables": [rp.ExcelDf(data), rp.ExcelDf(data2, startcol = 3)],
"Sheet With 3 Tables": [rp.ExcelDf(data), rp.ExcelDf(data2, startcol = 3), rp.ExcelDf(data3, startcol = 6)]} ,"output.xlsx"))```
Output Result
#### Reading only a portion of a table not centered at A1
Available Files to Read
***input2.xlsx***
```python
import pandas as pd
import Reporter as rp
import asyncioasync def main():
data_sources = rp.DataSources()
data_sources["MyInput"] = rp.SourceManager("Only Numbers", "Read Table",
{"Read Table": rp.ExcelSource("input2.xlsx", post_processor = {"full set": rp.DFProcessor(header_row_pos = 1, top = 2, bottom = 7, left = 2, right = 6),
"subset": rp.DFProcessor(header_row_pos = 1, top = 3, bottom = -1, left = 3, right = -1)})})# prints out only the numbers in the table
output = await data_sources["MyInput"].prepare("subset")
print(f"-- Subset --\n{output}")# prints the full table
output = await data_sources["MyInput"].prepare("full set")
print(f"\n-- Full Table --\n{output}")loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()```
Output Result
```
-- Subset --
1 col 2 col 3
3 1 4
4 2 5
5 3 6-- Full Table --
1 col 1 col 2 col 3 col 4
2 don't read don't read don't read don't read
3 don't read 1 4 don't read
4 don't read 2 5 don't read
5 don't read 3 6 don't read
6 don't read don't read don't read don't read
```#### Select a subset of Columns
Available Files to Read
***input4.xlsx***
```python
import pandas as pd
import Reporter as rp
import asyncioasync def main():
data_sources = rp.DataSources()
data_sources["MyInput"] = rp.SourceManager("Renamed Columns", "Rename",
{"Rename": rp.ExcelSource("input4.xlsx",
post_processor = {"original": rp.DFProcessor(header_row_pos = 1, top = 2, bottom = 5, left = 1, right = 7),
"filtered": rp.DFProcessor(header_row_pos = 1, top = 2, bottom = 5, left = 1, right = 7,
ind_selected_columns = [0, 2], selected_columns = ["select 3", "repeat"])})})
# select the correct columns
output = await data_sources["MyInput"].prepare("filtered")
print(f"-- Selected Columns --\n{output}")# the original table
output = await data_sources["MyInput"].prepare("original")
print(f"\n-- Original Table --\n{output}")loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()```
Output Result
```
-- Selected Columns --
1 select 1 select 2 select 3
2 1 3 5
3 a c e
4 2019-01-20 00:00:00 2019-01-22 00:00:00 2019-01-24 00:00:00-- Original Table --
1 select 1 don't select 1 select 2 don't select 2 select 3 don't select 3
2 1 2 3 4 5 6
3 a b c d e f
4 2019-01-20 00:00:00 2019-01-21 00:00:00 2019-01-22 00:00:00 2019-01-23 00:00:00 2019-01-24 00:00:00 2019-01-25 00:00:00
```