python股票数据处理(python导入股票数据)
前面我们讲了如何从东方财富网站获取所有股票数据,那么我们如何筛选和分析股票呢?这需要保存库存数据。今天我们就来看看如何将这些数据保存到Excel中。
目前Excel中常用的格式有xls和xlsx。小编推荐以xlsx格式保存数据,也推荐使用openpyxl。
首先,创建一个Excel并添加标题行,如下所示。
然后,将之前获得的数据保存到Excel中。代码如下:
importrequestsfromopenpyxlimportload_workbook#打开Excelwb=load_workbook('./stock.xlsx',read_only=False)#打开工作表ws=wb.activea=2#从第2行开始插入数据#获取股票数据url=''foriinrange(1,10):data={'fields':'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152','pz':,#每页number'pn':i,#页码'fs':'m:0t:6,m:0t:80,m:1t:2,m:1t:23,m:0t:81s:'}响应=requests.get(url,数据)response_json=response.json()ifresponse_json['data']isNone:#当返回数据为空时停止循环breakforj,kinresponse_json['data']['diff'].items():code=k['f12']#代码name=k['f14']#名称price=k['f2']#股价pe=k['f9']#动态市盈率pb=k['f23']#市净率total_value=k['f20']#总市值currency_value=k['f21']#流通市值price=round(price/100,2)#价格转换为正确值pe=round(pe/100,2)#将市盈率转换为正确值pb=round(pb/100,2)#将市净率转换为正确值(保留2位小数)total_value=round(total_value/,2)#将总市值折算为1亿元currency_value=round(currency_value/,2)#将流通市值折算为1亿元元print('代码:%s,名称:%s,当前价格:%s,动态市盈率:%s,市净率:%s,总市值:%s亿,流通市值:%s亿'%(code,name,price,pe,pb,total_value,currency_value))#将数据写入Excelws.cell(行=a,列=1).value=代码ws.cell(行=a,列=2).value=名称ws.cell(行=a,列=3).value=价格ws.cell(行=a,列=4).value=pews.cell(行=a,列=5).value=pbws.cell(行=a,列=6).value=总值ws.cell(行=a,column=7).value=currency_valuea=1#保存wb.save('./stock.xlsx')
结果如下图:
#财经##股票##股市分析##Ashare##stockfinance#
如何使用python将大量数据导出到Excel中的小技巧
如何使用python导出大量数据到Excel的技巧
问题描述:为了更好的展示数据,Excel格式的数据文件往往比文本文件更有优势,但是具体在python中,如何将数据导出到Excel呢?如果需要导出大量数据怎么办?本文主要解决以上两个问题。
(2)具体步骤如下:
1.第一步安装openpyxl,
就用pipinstallopenpyxl即可,不过windows下安装的版本是2.2.6版本,但是centos自动安装4.1版本。
我写的代码在Windows下跑得好好的,但是在CentOS上就报错,说ew=ExcelWriter(workbook=wb)少了一个参数,所以我果断在237服务器上安装了2.2.6版本,问题就解决了。
pip安装openpyxl==2.2.6
2.第二步,哈哈,不,不废话了,直接上代码,ps,代码中包含了xlwt和openpyxl的两个实现版本。
延伸阅读:查阅资料后,发现网上有不同的说法。概括起来有以下几点:
pythonExcel相关操作有两组模块库,一组是xlrd、xlwt、xlutils,一组是openpyxl。
不过前一组比较老,只能处理Excel97-或Excel97之前版本生成的xls格式的excel文件。xlwt甚至不支持07版本之后的excel。一般来说,Excel中的excel文件这种格式,只能支持最大256列或行的excel文件。
因此,当面临需要将大量数据导出到excel时,你会有以下三种选择:更改为存储格式,例如另存为CSV文件使用openpyxl——,因为它支持Excel+xlsx/xlsm格式的处理(3)win32COM(仅限Windows)
当然,我们必须直面困难。为了更好地向产品和用户展示数据,我们仍然选择第二种方案。
ps,非常幸运。经过一番搜索,我找到了openpyxl,它支持Excel07+。一直有人在维护。这些文件清晰易读。您可以参考教程和API文档快速上手。就是这个啦~
废话不多说,直接上代码。请参考一下。
#编码:utf-8
#希望对大家有帮助,有问题请多多提问
创建者:yaoyz
日期:/01/24
导入xlrd
导入xlwt
#工作簿相关
从openpyxl.workbook导入工作簿
#ExcelWriter,封装了非常强大的excel写入功能
从openpyxl.writer.excel导入ExcelWriter
#如何将蛋疼数字转换为列字母
从openpyxl.utils导入get_column_letter
从openpyxl.reader.excel导入load_workbook
类HandleExcel():
Excel相关操作类
def__init__(self):
自己。head_row_labels=[u学生学号,u学生姓名,u联系方式,u知识点ID,u知识点名称]
'''
功能:
读取txt文件中的每条记录并保存到列表中
参数:
filename:需要读取的文件名
返回:
res_list:返回的记录列表
'''
defread_from_file(自身,文件名):
res_list=[]
file_obj=打开(文件名,'r')
对于file_obj.readlines():中的行
res_list.append(行)
file_obj.close()
返回res_list
'''
功能:
读取*.xlsx中的每条记录,保存到data_dic中并返回
参数:
excel_name:需要读出的文件名
返回:
data_dic:返回记录的字典
'''
defread_excel_with_openpyxl(self,excel_name='testexcel.xlsx'):
#读取excel文件
wb=load_workbook(文件名=excel_name)
#显示有多少张表
print'工作表范围:',wb.get_named_ranges()
print'工作表名称:',wb.get_sheet_names()
#获取第一个表
工作表名称=wb.get_sheet_names()
ws=wb.get_sheet_by_name(sheetnames[0])
#显示表名、表行数、表列数
打印'工作表Titile:',ws.title
print'工作表行数:',ws.get_highest_row()
print'工作表Cols:',ws.get_highest_column()
#获取读取的excel表格中有多少行和列
row_num=ws.get_highest_row()
col_num=ws.get_highest_column()
打印'row_num:',row_num,'col_num:',col_num
#创建字典来存储数据
数据_dic={}
符号=1
#将数据保存到字典中
对于ws.rows:中的行
临时列表=[]
#打印'行',行
对于row:中的单元格
打印单元格值,
temp_list.append(cell.value)
打印''
data_dic[符号]=temp_list
符号+=1
打印数据_dic
返回数据_dic
'''
功能:
读取*.xlsx中的每条记录,保存到data_dic中并返回
参数:
Records:保存包含每条记录的列表
save_excel_name:文件名另存为
head_row_stu_arrive_star:
返回:
data_dic:返回记录的字典
'''
defwrite_to_excel_with_openpyxl(self,记录,head_row,save_excel_name='save.xlsx'):
#创建一个新工作簿
wb=工作簿()
#创建一个新的excelWriter
ew=ExcelWriter(工作簿=wb)
#设置文件输出路径和名称
dest_filename=save_excel_name.decode(utf-8)
#第一张表是ws
ws=wb.工作表[0]
#设置ws的名称
ws.title='范围名称'
#写第一行,标题行
对于范围内的h_x(1,len(head_row)+1):
h_col=get_column_letter(h_x)
#打印h_col
ws.cell(%s%s%(h_col,1)).value=%s%(head_row[h_x-1])
#写入第二行及以下各行
我=2
记录在案:
record_list=str(record).strip().split('t')
对于范围内的x(1,len(record_list)+1):
列=get_column_letter(x)
ws.cell(%s%s%(col,i)).value=%s%(record_list[x-1].decode(utf-8))
我+=1
#写入文件
ew.save
'''
功能:
测试输出Excel内容
读取Excel文件
参数:
excel_name:要读出的Excel文件名
返回:
没有任何
'''
defread_excel(self,excel_name):
工作簿=xlrd.open_workbook(excel_name)
打印工作簿.sheet_names()
#获取所有工作表
printworkbook.sheet_names()#[usheet1,usheet2]
sheet2_name=workbook.sheet_names()[1]
#根据sheet索引或名称获取sheet内容
sheet2=workbook.sheet_by_index(1)#sheet索引从0开始
Sheet2=工作簿.sheet_by_name(Sheet1)
#sheet的名称、行数、列数
打印sheet2.name,sheet2.nrows,sheet2.ncols
#获取整行整列的值
rows=sheet2.row_values(3)#获取第四行的内容
cols=sheet2.col_values(2)#获取第三列的内容
打印行
打印列
#获取单元格内容
打印sheet2.cell(1,0).value
打印sheet2.cell_value(1,0)
打印sheet2.row(1)[0].value
#获取单元格内容的数据类型
打印sheet2.cell(1,0).ctype
#根据名字获取
返回工作簿.sheet_by_name(uSheet1)
'''
功能:
设置单元格样式
参数:
name:字体名称
height:字体高度
bold:是否大写
返回:
style:返回设置的格式对象
'''
defset_style(自我,名称,高度,粗体=False):
style=xlwt.XFStyle()#初始化样式
font=xlwt.Font()#创建样式字体
font.name=name#TimesNewRoman字体
字体.bold=粗体
字体颜色索引=4
字体高度=高度
边框=xlwt.Borders()
边框.左=6
边框.右=6
边框.顶部=6
边框.底部=6
样式.字体=字体
style.borders=边框
返回样式
'''
功能:
按照步骤设置单元格样式,并将计算结果从txt转换为Excel保存。
参数:
dataset:要保存的结果数据,列表存储
返回:
将结果保存为Excel对象
'''
defwrite_to_excel(自身,数据集,save_excel_name,head_row):
f=xlwt.Workbook()#创建工作簿
#创建第一张sheet:
#表1
计数=1
sheet1=f.add_sheet(usheet1,cell_overwrite_ok=True)#创建工作表
#第一行标题:
对于范围内的p(len(head_row)):
sheet1.write(0,p,head_row[p],self.set_style(TimesNewRoman,250,True))
default=self.set_style(TimesNewRoman,200,False)#定义循环外的样式将起作用
对于dataset:中的行
row_list=str(line).strip('n').split('t')
对于范围内的pp(len(str(line).strip('n').split('t'))):
sheet1.write(count,pp,row_list[pp].decode(utf-8),默认)
计数+=1
f.save(save_excel_name)#保存文件
defrun_main_save_to_excel_with_openpyxl(self):
print'测试读写年及以后的excel文件xlsx,以方便向文件写入更多数据'
打印'1。将txt文件读入内存并将其存储为列表对象'
dataset_list=self.read_from_file('test_excel.txt')
测试使用openpyxl处理EXCEL
打印'2.将文件写入Excel表格'
head_row_label=self.head_row_labels
save_name='test_openpyxl.xlsx'
self.write_to_excel_with_openpyxl(数据集列表,head_row_label,save_name)
打印'3.执行后,将txt格式文件另存为Excel文件'
defrun_main_save_to_excel_with_xlwt(self):
打印'4。将txt文件读入内存并将其存储为列表对象'
dataset_list=self.read_from_file('test_excel.txt')
测试使用xlwt处理EXCEL97-
打印'5。将文件写入Excel表'
head_row_label=self.head_row_labels
save_name='test_xlwt.xls'
self.write_to_excel_with_openpyxl(数据集列表,head_row_label,save_name)
打印'6。执行后,将txt格式文件另存为Excel文件'
如果__name__==__main__:
print'创建句柄Excel对象'
obj_handle_excel=HandleExcel()
#使用openpyxl和xlwt分别向文件写入数据
obj_handle_excel.run_main_save_to_excel_with_openpyxl()
obj_handle_excel.run_main_save_to_excel_with_xlwt()
测试读取的文件。注意openpyxl无法读取xls文件,xlrd无法读取xlsx格式的文件。
#obj_handle_excel.read_excel_with_openpyxl('testexcel.xls')#写法错误
#obj_handle_excel.read_excel_with_openpyxl('testexcel.xls')#写法错误
obj_handle_excel.read_excel('testexcel.xls')
obj_handle_excel.read_excel_with_openpyxl('testexcel.xlsx')
python怎么把数据写入到excel
Python中,xlrd一般用于读取Excel文件,xlwt用于生成Excel文件。需要注意的是,使用xlrd读取excel是无法进行操作的:xlrd.open_workbook()方法返回的是xlrd.Book类型,该类型是只读的,无法进行操作。xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。
因此,读取和生成Excel文件非常容易,但修改现有的Excel文件就比较麻烦了。不过,还有xlutils提供了复制excel文件内容和修改文件的功能。事实上,它只是在xlrd.Book和xlwt.Workbook之间建立了一条管道。
xlutils.copy模块的copy()方法实现了此功能。示例代码如下:
从xlrd导入open_workbookfromxlutils.copy导入副本
rb=open_workbook(m:\\1.xls)
#通过sheet_by_index()得到的sheet没有write()方法rs=rb.sheet_by_index(0)
wb=复制(rb)
#通过get_sheet()获得的sheet有write()方法ws=wb.get_sheet(0)
ws.write(0,0,改变了!)
wb.保存(m:\\1.xls)
练习代码:
特别说明:由于复制保存本质上是通过xlwt保存的,所以文件实际上是通过xlwt保存的。
但是通过xlwt只能写入xls文件,而不能写入xlsx文件。
导入xlrdfromxlwt导入*fromxlutils.copy导入副本
xlsfile=test.xlsbook=xlrd.open_workbook(xlsfile)
sheet_name=book.sheet_names()print(sheet_name)
工作表=book.sheet_by_index(1)
nrows=工作表.nrows
ncols=sheet.ncolsprint(nrows)print(ncols)
行数据=sheet.row_values(0)
col_data=sheet.col_values(0)打印(row_data)打印(col_data)
单元格值=sheet.单元格值(3,0)打印(单元格值)
单元格值2=sheet.cell(3,0)print(单元格值2)
sheet.put_cell(1,2,1,'测试',0)
cell_value2=Sheet.cell(1,1)print(cell_value2)#保存xlsfilewb=copy(book)
wb.保存