Python 3: Как исправить FileNotFoundError: [Errno 2] Нет такого файла или каталога - PullRequest
0 голосов
/ 13 июня 2019

Отказ от ответственности: я довольно плохо знаком с 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))

1 Ответ

0 голосов
/ 13 июня 2019

Для создания имени файла попробуйте:

self.filename = str(ticker) + '_' + str(sdate) + '_to_' + str(edate) + '.csv'

здесь sdate и edate 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.

...