Nov-05-2018, 09:09 PM
I'm attempting to load 2 arrays from 2 columns read from a file . The file is delimited and I'm using numpy's loadtxt() function to load the arrays, like so:
i.e. using
#!/usr/bin/python3
import sys
import numpy as np
import os.path as op
from datetime import datetime, date, time
from io import StringIO
sample_data = StringIO("AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800\n\
AAPL,31-01-2011, ,335.8,340.04,334.3,339.32,13473000\n\
AAPL,01-02-2011, ,341.3,345.65,340.98,345.03,15236800\n\
AAPL,02-02-2011, ,344.45,345.25,343.55,344.32,9242600\n\
AAPL,03-02-2011, ,343.8,344.24,338.55,343.44,14064100\n\
AAPL,04-02-2011, ,343.61,346.7,343.51,346.5,11494200")
def usage():
print("usage: {} {}".format(op.basename(sys.argv[0], 'filename')))
def get_weekday(date_str):
return datetime.strptime(date_str, "%d-%m-%Y").date().weekday()
def load_arrays(data_file, *col_tuple):
a1 = a2 = None
rec_type = np.dtype([('stock_code', '|S4'), ('cob_date', '|S10'), ('filler', '|S1'),
('low_price', 'f4'), ('high_price', 'f4'), ('close_price', 'f4'),
('valuation', 'f4'), ('volume', 'uint') ])
try:
a1, a2 = np.loadtxt(data_file, dtype=rec_type, usecols=col_tuple, delimiter=',', unpack=True)
# a1, a2 = np.loadtxt(data_file, usecols=col_tuple, delimiter=',', unpack=True)
except IOError as e:
usage() # failed to open file
except Exception as e: print(e)
return a1, a2
try:
# data_file = sys.argv[0]
data_file = sample_data
c, v = load_arrays(data_file, 5, 6)
except IndexError:
usage()
print("Closing price array:\n{}".format(c))
print("\nValuation array:\n{}".format(v))When I attempt to load the arrays without any data types defined then the load is successfull,i.e. using
a1, a2 = np.loadtxt(data_file, usecols=col_tuple, delimiter=',', unpack=True)but when I attempt to apply data types, by specifying
a1, a2 = np.loadtxt(data_file, dtype=rec_type, usecols=col_tuple, delimiter=',', unpack=True)I get the following output
list index out of range Closing price array: None Valuation array: NoneCan anybody suggest why the difference or what I am specifying incorrectly as part of the data type specification?
