56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
# report.py
|
|
import csv
|
|
|
|
def read_portfolio(filename):
|
|
'''
|
|
Read a stock portfolio file into a list of dictionaries with keys
|
|
name, shares, and price.
|
|
'''
|
|
portfolio = []
|
|
with open(filename) as f:
|
|
rows = csv.reader(f)
|
|
headers = next(rows)
|
|
|
|
for row in rows:
|
|
stock = {
|
|
'name' : row[0],
|
|
'shares' : int(row[1]),
|
|
'price' : float(row[2])
|
|
}
|
|
portfolio.append(stock)
|
|
|
|
return portfolio
|
|
|
|
def read_prices(filename):
|
|
'''
|
|
Read a CSV file of price data into a dict mapping names to prices.
|
|
'''
|
|
prices = {}
|
|
with open(filename) as f:
|
|
rows = csv.reader(f)
|
|
for row in rows:
|
|
try:
|
|
prices[row[0]] = float(row[1])
|
|
except IndexError:
|
|
pass
|
|
|
|
return prices
|
|
|
|
portfolio = read_portfolio('../../Work/Data/portfolio.csv')
|
|
prices = read_prices('../../Work/Data/prices.csv')
|
|
|
|
# Calculate the total cost of the portfolio
|
|
total_cost = 0.0
|
|
for s in portfolio:
|
|
total_cost += s['shares']*s['price']
|
|
|
|
print('Total cost', total_cost)
|
|
|
|
# Compute the current value of the portfolio
|
|
total_value = 0.0
|
|
for s in portfolio:
|
|
total_value += s['shares']*prices[s['name']]
|
|
|
|
print('Current value', total_value)
|
|
print('Gain', total_value - total_cost)
|