如何将从yfinance下载的SNP500等交易品种列表的数据保存到csv文件中,然后仅添加当前日期并重复

laximzn5  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(104)

嗨,我正在构建一个工具,从Yfinance下载股票数据,我想下载历史数据一次,将其保存到VS文件中的一个目录,然后每天只需添加最后一个交易日(一行)并重新保存它。问题是,csv文件从头开始覆盖,所以如果我只提供最后一个交易日下载,这将是所有的行,我将结束与每个符号。我使用的代码分为两部分。首先在pandas中创建dataframe,然后保存它,其中包括我所有的新功能,然后从保存的目录中获取我想要的任何其他项目中的数据框。我还有第二个问题,关于这是否是使用csv文件和pandas dataframe而不是sqlite数据库的好做法,以及不同方法之间的优缺点。
第1部分创建目录和csv文件

import yfinance as yf
import os
import pandas as pd

with open(r'C:\zPythonFilesDir\yfinance\symbolstest.csv') as f:
    lines = f.read().splitlines()
    #print(lines)
    for symbol in lines:
        print(symbol)
        data = yf.download(symbol, start="2023-07-01", end="2023-07-30")
        #print(data)
        data.to_csv(r'C:\zPythonFilesDir\yfinance\datasetstest\{}.csv'.format(symbol))

for filename in os.listdir(r'C:\zPythonFilesDir\yfinance\datasetstest'):
    #print(filename)
    symbol = filename.split(".")[0]
    print(symbol)
    df = pd.read_csv(r'C:\zPythonFilesDir\yfinance\datasetstest/{}'.format(filename))
    # new columns and functions here
    x = 2 * round(df['High'],2)
    df['new_val'] = x
    # write new datasets with functions columns in different directory
    df.to_csv(r'C:\zPythonFilesDir\yfinance\newdatasetstest\{}.csv'.format(symbol))
    print(df)

第2部分从csv文件中获取数据

import os
import pandas as pd

for filename in os.listdir(r'C:\zPythonFilesDir\yfinance\newdatasetstest'):
    #print(filename)
    symbol = filename.split(".")[0]
    print(symbol)
    df1= pd.read_csv(r'C:\zPythonFilesDir\yfinance\newdatasetstest/{}'.format(filename))
    print(df1)

df2 = pd.read_csv(r'C:\zPythonFilesDir\yfinance\newdatasetstest/AAPL.csv')
print(df2)

symbolstest.csv具有感兴趣的符号

cgvd09ve

cgvd09ve1#

数据框默认为_csv方法,在打开文件时使用写模式,您需要做的是将其更改为追加,这可以使用完成。

SAVE_TO_PATH = r'C:\zPythonFilesDir\yfinance\newdatasetstest\{}.csv'.format(symbol)
    df.to_csv(SAVE_TO_PATH, mode='a', header=False)

为了可读性,我还将path移到了函数参数之外,并将header设置为false,因为我们不想每天都追加它们
顺便说一句,它是cSV(逗号分隔值)而不是cVS。
底线是使用mode ='a'当你想添加行到现有的文件或使用mode ='w'当你是第一次添加/想覆盖文件.(mode ='w'是默认的,所以你不必指定它)

相关问题