Exercise: Read CSV File¶
Sample CSV File¶
The following table (download CSV
) is an
excerpt from a stock exchange procedure [1]. In its
visual form, it would be nicely made up, headed by a row that contains
the column names.
FUND_NAME |
FUND_ISIN |
FUND_TICKER |
AS_OF_DATE |
FUND_IN_UNIVERSE |
FUND_OF_FUNDS |
FUND_HOLDINGS_COUNT |
FUND_HOLDING_FUNDS_COUNT |
---|---|---|---|---|---|---|---|
American Funds American Balanced Fund;A |
US0240711020 |
ABALX |
20210103 |
T |
2,084 |
0 |
|
Dodge & Cox Balanced Fund |
US2562011047 |
DODBX |
20210103 |
T |
T |
410 |
1 |
Dodge & Cox Stock Fund |
US2562191062 |
DODGX |
20210103 |
T |
T |
74 |
1 |
Franklin Income Fund;A1 |
US3534963000 |
FKINX |
20210103 |
T |
T |
302 |
1 |
American Funds Growth Fund of America;A |
US3998741066 |
AGTHX |
20210103 |
T |
378 |
0 |
|
T Rowe Price Growth Stock Fund |
US7414791092 |
PRGFX |
20210103 |
T |
T |
87 |
1 |
Fidelity Puritan Fund |
US3163451079 |
FPURX |
20210103 |
T |
1,124 |
0 |
|
Fidelity Contrafund |
US3160711095 |
FCNTX |
20210103 |
T |
363 |
0 |
|
T Rowe Price Capital Appreciation Fund |
US77954M1053 |
PRWCX |
20210103 |
T |
T |
165 |
2 |
Old Westbury Large Cap Strategies Fund |
US6804141090 |
OWLSX |
20210103 |
T |
T |
199 |
2 |
American Funds Capital Income Builder;A |
US1401931035 |
CAIBX |
20210103 |
T |
1,582 |
0 |
|
Harbor Capital Appreciation Fund;Institutional |
US4115115044 |
HACAX |
20210103 |
T |
55 |
0 |
|
T Rowe Price Blue Chip Growth Fund |
US77954Q1067 |
TRBCX |
20210103 |
T |
T |
123 |
1 |
Dreyfus Treasury Securities Cash Management;Inst |
US2619411083 |
DIRXX |
20210103 |
T |
50 |
0 |
|
BlackRock Global Allocation Fund;Institutional |
US09251T5092 |
MALOX |
20210103 |
T |
T |
1,241 |
16 |
Fidelity Low-Priced Stock Fund |
US3163453059 |
FLPSX |
20210103 |
T |
799 |
0 |
|
BlackRock Liquidity Treasury Trust Fund;Inst |
US09248U5517 |
TTTXX |
20210103 |
T |
63 |
0 |
|
DFA Five-Year Global Fixed Income Portfolio;Inst |
US2332038841 |
DFGBX |
20210103 |
T |
350 |
0 |
|
Federated Hermes US Treasury Cash Reserves;Inst |
US60934N6821 |
UTIXX |
20210103 |
T |
55 |
0 |
|
Oakmark International Fund;Investor |
US4138382027 |
OAKIX |
20210103 |
T |
80 |
0 |
|
Advanced Srs T Rowe Price Asset Allocation Port |
US00767H4939 |
20210103 |
T |
2,787 |
0 |
||
FPA Crescent Fund;Inst |
US30254T7596 |
FPACX |
20210103 |
T |
138 |
0 |
|
Franklin Income Fund;C |
US3534968058 |
FCISX |
20210103 |
T |
T |
302 |
1 |
MFS Value Fund;I |
US5529836943 |
MEIIX |
20210103 |
T |
76 |
0 |
|
Goldman Sachs FS Treasury Instruments Fd;Inst |
US38142B5003 |
FTIXX |
20210103 |
T |
67 |
0 |
|
Schwab S&P 500 Index Fund |
US8085098551 |
SWPPX |
20210103 |
T |
508 |
0 |
|
Templeton Global Bond Fund;Advisor |
US8802084009 |
TGBAX |
20210103 |
T |
T |
82 |
1 |
First Eagle Global Fund;I |
US32008F6060 |
SGIIX |
20210103 |
T |
T |
225 |
1 |
iShares Core S&P 500 ETF |
US4642872000 |
IVV |
20210103 |
T |
T |
507 |
1 |
Vanguard 500 Index Fund;Admiral |
US9229087104 |
VFIAX |
20210103 |
T |
510 |
0 |
|
Vanguard Total Stock Market Index Fund;Admiral |
US9229087286 |
VTSAX |
20210103 |
T |
3,370 |
0 |
|
SPDR S&P MidCap 400 ETF |
US78467Y1073 |
MDY |
20210103 |
T |
400 |
0 |
|
SPDR Dow Jones Industrial Average ETF Trust |
US78467X1090 |
DIA |
20210103 |
T |
31 |
0 |
|
Health Care Select Sector SPDR Fund |
US81369Y2090 |
XLV |
20210103 |
T |
T |
64 |
1 |
Consumer Discretionary Select Sector SPDR Fund |
US81369Y4070 |
XLY |
20210103 |
T |
T |
62 |
1 |
Energy Select Sector SPDR Fund |
US81369Y5069 |
XLE |
20210103 |
T |
T |
28 |
1 |
Financial Select Sector SPDR Fund |
US81369Y6059 |
XLF |
20210103 |
T |
T |
66 |
1 |
Technology Select Sector SPDR Fund |
US81369Y8030 |
XLK |
20210103 |
T |
T |
74 |
1 |
Invesco QQQ Trust Series 1 |
US46090E1038 |
QQQ |
20210103 |
T |
104 |
0 |
|
Dodge & Cox International Stock Fund |
US2562061034 |
DODFX |
20210103 |
T |
T |
80 |
1 |
iShares MSCI EAFE ETF |
US4642874659 |
EFA |
20210103 |
T |
T |
897 |
1 |
JPMorgan 100% US Treasury Secs Mny Mkt Fd;Inst |
US4812A28358 |
JTSXX |
20210103 |
T |
41 |
0 |
|
Invesco S&P 500 Eql Wght ETF |
US46137V3574 |
RSP |
20210103 |
T |
T |
507 |
1 |
JPMorgan 100% US Treasury Secs Mny Mkt Fd;Capital |
US4812A03757 |
CJTXX |
20210103 |
T |
41 |
0 |
|
Invesco Developing Markets Fund;Y |
US00143W8753 |
ODVYX |
20210103 |
T |
T |
72 |
3 |
SPDR S&P Dividend ETF |
US78464A7634 |
SDY |
20210103 |
T |
T |
118 |
1 |
DFA International Core Equity Portfolio;Inst |
US2332033719 |
DFIEX |
20210103 |
T |
4,888 |
0 |
|
Edgewood Growth Fund;Institutional |
US0075W07594 |
EGFIX |
20210103 |
T |
T |
23 |
1 |
Advanced Series Prudential Growth Allocation Port |
US00767H7585 |
20210103 |
T |
T |
2,400 |
3 |
|
MFS Value Fund;R6 |
US55273H3536 |
MEIKX |
20210103 |
T |
76 |
0 |
Requirement¶
Write a function
read_stock()
that …takes a
filename
parameterreads the CSV (using a
csv.DictReader
to automatically absorb the header line of the CSV file into dictionary keys), and thereby converts the fields as follows,FUND_NAME
:str
FUND_ISIN
:str
FUND_TICKER
:str
AS_OF_DATE
:datetime
FUND_IN_UNIVERSE
:bool
(interpretingT
andF
straightforwardly)FUND_HOLDINGS_COUNT
:float
FUND_HOLDING_FUNDS_COUNT
:float
returns a list of dictionaries (better yet: an iterable).
Put that function in a module, say
stock.py
Write an executable program, say
read-stock.py
, that is called like follows,$ python read-stock.py stock.csv ...
It then writes the returned dictionaries/record to
stdout
in the most beautiful way you can come up with.
Footnotes