免责声明:我对python来说还很陌生,所以请先对不起,因为他缺乏编码知识。 我正在从Yahoo Finance中提取历史数据,并希望通过它运行交易策略。我大部分都进行了回测,但是为了提高效率和可读性,我决定尝试创建一个具有更明确定义的变量的类。提取数据时,我想将其下载为csv文件,这样就不必在每次运行时都重新提取数据。就是说,当我尝试在创建csv文件名时使用变量时,出现FileNotFoundError。但是,如果我只是用硬代码命名,那么创建csv没问题。我尝试了多种使用变量作为文件名的方法,但是除了硬编码之外,其他方法均无效。有人可以帮助我了解发生了什么事吗?
##Working Code:
class backtest:
def __init__(self, ticker):
start = '1/3/2000'
end = '1/3/2019'
sdate = pd.to_datetime(start)
edate = pd.to_datetime(end)
if os.path.islink('{}_{}_to_{}.csv'.format(ticker, start, end)) == True:
self.df = pd.read_csv('{}_{}_to_{}.csv'.format(ticker, start, end), parse_dates=True)
else:
##Failed attempt 1
##self.filename = '{}_{}_to_{}.csv'.format(ticker, start, end)
##self.df.to_csv(self.filename)
##Failed attempt 2
##self.filename = str(ticker) + '_' + start + '_to_' + end + '.csv'
##self.df.to_csv(self.filename)
self.df = web.DataReader(ticker, 'yahoo', sdate, edate)
self.df.to_csv('amzn_1/3/2000_to_1/3/19.csv')
amzn = backtest('amzn')
print(amzn.df.head(1))
答案 0 :(得分:0)
尝试使用以下文件名作为文件名
: self.filename = str(ticker) + '_' + str(sdate) + '_to_' + str(edate) + '.csv'
在这里,日期和日期是class 'pandas._libs.tslibs.timestamps.Timestamp'
。因此,在附加时必须将它们转换为字符串。
控制台中的结果将是:
High ... Adj Close
Date ...
2000-01-03 89.5625 ... 89.375
文件名将为amzn_2000-01-03 00:00:00_to_2019-01-0300:00:00.csv
。如以上注释中所述,文件名不应包含特殊字符'/'。因此,请使用sdate而不是strat。