Skip to content

Instantly share code, notes, and snippets.

@jasonjohnson
Last active January 20, 2025 18:19
Show Gist options
  • Save jasonjohnson/4fa0ea837f4a9c7aef7086a2eeddfd72 to your computer and use it in GitHub Desktop.
Save jasonjohnson/4fa0ea837f4a9c7aef7086a2eeddfd72 to your computer and use it in GitHub Desktop.
export scryfall data to csv
import csv
import json
columns = [
'name',
'type_line',
'oracle_text',
'colors',
'color_identity',
'rarity',
'keywords',
'power',
'toughness',
'mana_cost',
'cmc',
'set',
'set_name',
'set_type',
'legalities',
'tcgplayer_id',
'cardmarket_id',
'price_usd',
'price_usd_foil',
'edhrec_rank',
'scryfall_uri',
]
db = json.load(open('oracle.json', 'r', encoding='utf-8'))
csv = csv.writer(open('oracle.csv', 'w', encoding='utf-8', newline=''))
csv.writerow(columns)
for card in db:
row = []
for column in columns:
if column == 'legalities':
value = card.get(column, {})
value = '|'.join([k for k, v in value.items() if v == 'legal'])
elif column == 'price_usd':
value = float(card.get('prices', {}).get('usd') or 0.0)
elif column == 'price_usd_foil':
value = float(card.get('prices', {}).get('usd_foil') or 0.0)
else:
value = card.get(column, '')
if isinstance(value, list):
value = '|'.join(value)
if isinstance(value, str):
if '\n' in value:
value = value.replace('\n', ' ')
row.append(value)
csv.writerow(row)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment