嗨,我正在构建一个工具,从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具有感兴趣的符号
1条答案
按热度按时间cgvd09ve1#
数据框默认为_csv方法,在打开文件时使用写模式,您需要做的是将其更改为追加,这可以使用完成。
为了可读性,我还将path移到了函数参数之外,并将header设置为false,因为我们不想每天都追加它们
顺便说一句,它是cSV(逗号分隔值)而不是cVS。
底线是使用mode ='a'当你想添加行到现有的文件或使用mode ='w'当你是第一次添加/想覆盖文件.(mode ='w'是默认的,所以你不必指定它)