如何将从 yfinance 下载的符号列表(如 SNP 500)的数据保存到 cvs 文件,然后仅添加当前日期并重复

问题描述 投票:0回答:1

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

第 1 部分 创建目录和cvs文件

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 部分 从 Cvs 文件获取数据

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.cvs 具有感兴趣的符号

python pandas cvs yfinance
1个回答
0
投票

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

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

我还将路径移到函数参数之外以提高可读性,并将标头设置为 false,因为我们不想每天附加它们

顺便说一句,它是 CSV(逗号分隔值)而不是 cVS。

底线是当您想向现有文件添加行时使用 mode='a' 或当您第一次添加/想要覆盖文件时使用 mode='w' 。(mode='w' 是默认值,所以你不必指定它)

© www.soinside.com 2019 - 2024. All rights reserved.