0

For this same Stack Overflow question How do I output a list of dictionaries to an Excel sheet?.

For xlsx code by jossef-harush we can use this:

import xlsxwriter

# ...

def create_xlsx_file(file_path: str, headers: dict, items: list):
    with xlsxwriter.Workbook(file_path) as workbook:
        worksheet = workbook.add_worksheet()
        worksheet.write_row(row=0, col=0, data=headers.values())
        header_keys = list(headers.keys())
        for index, item in enumerate(items):
            row = map(lambda field_id: item.get(field_id, ''), header_keys)
            worksheet.write_row(row=index + 1, col=0, data=row)
headers = {
    'bank': 'Money in Bank',
    'dailyWinners': 'Daily Winners',
    'dailyFree': 'Daily Free',
    'user': 'User',
}

players = [
    {'dailyWinners': 3, 'dailyFreePlayed': 2, 'user': 'Player1', 'bank': 0.06},
    {'dailyWinners': 3, 'dailyFreePlayed': 2, 'user': 'Player2', 'bank': 4.0},
    {'dailyWinners': 1, 'dailyFree': 2, 'user': 'Player3', 'bank': 3.1},
    {'dailyWinners': 3, 'dailyFree': 2, 'user': 'Player4', 'bank': 0.32}
]

create_xlsx_file("my xslx file.xlsx", headers, players)

For creating a CSV file, what are the changes I need to do in the above code?

Like create_csv_file("my csv file.csv", headers, players).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Rahul
  • 87
  • 1
  • 1
  • 12

1 Answers1

1
import csv

def create_csv_file(file_path, headers, items):
    with open(file_path, "wt") as f:
        dw = csv.DictWriter(f, headers.values(), extrasaction='ignore')
        dw.writeheader()
        for row in items:
            dw.writerow({headers.get(k): v for (k, v) in row.items()})

writes

Money in Bank,Daily Winners,Daily Free,User
0.06,3,,Player1
4.0,3,,Player2
3.1,1,2,Player3
0.32,3,2,Player4

Note that this will ignore any dict keys not in headers; in your case, the dailyFreePlayeds.

AKX
  • 152,115
  • 15
  • 115
  • 172
  • for row in players: for players can I use dynamic value – Rahul Sep 07 '21 at 14:48
  • Sorry, typo. That was meant to be `items`. – AKX Sep 07 '21 at 14:50
  • after running your code it's working fine but after every row new blank row coming inside csv file – Rahul Sep 07 '21 at 15:02
  • That's not happening on my machine. – AKX Sep 07 '21 at 15:04
  • Open the file in a text editor, not Excel. Are there double blank rows there too? If not, that's an Excel issue. – AKX Sep 07 '21 at 15:06
  • Well, I don't know what to tell you – that doesn't happen on my machine with the very same code. – AKX Sep 07 '21 at 15:24
  • with open(file_path, "at",newline='') we have to use newline='' to overcome new row problem [source](https://stackoverflow.com/questions/3348460/csv-file-written-with-python-has-blank-lines-between-each-row) – Rahul Sep 08 '21 at 06:37