请不要来。 哥哥来帮忙,我想有用。
直接进入实测结果图。
以下是代码。 请作为参考。
#-* -编码: utf-8-* -
' ' createdonsatfeb 10183360443360252018 @ author : sheng ' '
#导入两个模块
import tushare as ts
导入pandas as PD
#首先使用ts.get_stock_basics )命令获取股票代码的基本数据,然后使用to_excel ) )命令保存。
#以下为本人保存的路径
source _ date=r ' d :\ users\ sheng\ desktop\ finance transcriptstock list.xlsx '
#我们需要提取股票代码,用于以后的for循环。 首先,读取以前下载的文件,将第一列的股票代码进行字符串转换。
df=PD.read_excel(source_date,converters={ ' code ' : lambdax : str (x ) }}
#将提取出的股票代码列表化,分配代入和stockcode这一变量。
sockcode=list(map(str,df['code'] ) )
#开始循环下载。
for i in stockcode:
开始下载print ()股票数据………(格式(I ) ) ) ) ) )。
#设定各文件的文件名和保存位置。
file _ address=r ' d :\ users\ sheng\ desktop\ finance transcriptbig data{ }.xlsx '.xlsx
#提取各个股票的历史数据。
sock_data=ts.get_hist_data (
#导出到以前设定的好的文件地址。
stock _ data.to _ excel (file _ address )
#已将股票代码添加到excel中,因为每个导出股票的历史数据不包含股票代码
#在日期的下一列中添加股票代码,以便以后在所有数据合并后进行股票筛选。
#如果不需要,请删除以下三行代码。
dw _ data=PD.read _ excel (file _ address )
dw_data.insert(loc=1,column='code ',value=i ) )。
dw _ data.to _ excel (文件_地址)
#打印下载过程,便于观察。
print({}/{}hasbeendownloaded,{}股票数据下载完成)。
. format(stockcode.index(I ) 1,len (stock code ),I ) )
print----------------------------------请参阅。
一共3500股。 慢慢下车吧。 睡了! 晚安亲爱的
------------- -请参阅
更新代码以利用多线程,将下载速度提高了n倍。 一个多小时的生活现在只有五分钟。 简单粗暴。 以下是代码。 更改文件的保存地址的话马上就可以使用。
导入pandas as PD
import tushare as ts
导入操作系统
来自数据导入数据时间
来自日期导入时间delta
frommultiprocessing.dummyimportpoolasthreadpool
导入时间
class stock_data:
def __init__(self ) :
self.file _ path _ basic=r ' d :pycharmprojectstradefinal _ project _ a _ stock _ data _ bata
self.file _ dir _ daily=r ' d :pycharmprojectstrade _ final _ project _ a _ stock _ stock _ data _ Dai
self.current _ date _ key _ path=datetime.today ().strftime('%d_%m_%y ' ) )
self.latest _ basic _ key _ path='/basics _ data/stock _ basics _ { } '.format (self.current _ date _ key
self.whole _ files _ list _ daily=OS.list dir (self.file _ dir _ daily )。
self.start_date='2014-01-01' #选择开始时间
更新defupdate_stock_basic(self ) : #股票基本面数据
hdf=PD.hdf store (self.file _ path _ basic ) )。
if self.latest _ basic _ key _ pathinhdf.keys () :
print ()基本面资料已更新为() ).format (self.current _ date _ key _ path ) )。)。
else:
开始将print ()股票基本面更新为() ).format (self.current _ date _ key _ path ) ) )
df=ts.get_stock_basics (
hdf.put (self.latest _ basic _ key _ path,df,format='t ',data_columns=True,append=False ) ) )
print (股票基本面更新完成。 () ).format ) self.current_date_key_path ) )
latest _ stock _ basics=hdf.get (hdf.keys (([-1 ] ) ) ) ) )
hdf.close ()
return latest_stock_basics
defupdate_daily_data(self,code ) :
try:
df=ts.get _ k _ data (代码,self.start_date,ktype='d ',autype='qfq ' )
df.set_index('date ',inplace=True )。
df.to _ CSV (self.file _ dir _ daily '' { }.CSV '.format (code ),mode='wt ' ) ) ) ) )。
处理=round ((stock _ code.index ) code )/len (stock _ code ) ) * 100,2 ) ) ) ) ) ) )。
print (() % ).format () process () )
except:
print (“没有数据”
st=stock_data (
sock _ basics=ST.update _ stock _ basic (
stock _ basics=stock _ basics [~stock _ basics [ ' name ' ].str.contains ] #消除ST股
stock _ code=list (映射(str,stock_basics.index ) )
def daily_update () :
start1=time.time (
池=热池(400 ) )。
try:
pool.map(ST.update_daily_data,stock_code )。
except:
pool.map(ST.update_daily_data,stock_code )。
pool.close (
pool.join () )
end1=time.time (
diff2=end1 - start1
打印(diff2)计算需要时间
if __name__=='__main__':
daily_update ()