1. 通过xlrd模块读取数据
需要安装xlrd(pip install xlrd)并import
from xlrd import open_workbook as owb
首先需要指定excel文件,如果excel文件和python脚本在同一目录,使用相对路径就可以
wb = owb('abc.xlsx') # 数据文件
wb.sheet()函数返回一个list,是该excel文件里所有工作表(sheet)的一个列表
所以如果想指定某一工作表,可以这样写
table_base = wb.sheets()[0] # 读第一页当作base
如果想循环读取,则这样写
for s in wb.sheets():
print ('Sheet: ', s.name)
s.name返回的是工作表的名称,可以对此进行一些过滤,来筛选出自己想要读的一部分工作表
读取数据的函数是cell(row,col).value
for row in range(1,s.nrows): # 跳过第0行,即表头
tmp = s.cell(row, 2).value # 这里读取了第三列(C列)的数据,A列,B列,C列...
print(tmp)
几点说明:
- s.nrows 返回该工作表的行数
- s.ncols 返回该工作表的列数
- s.cell(row, col).value返回工作表第row行,第col列的数据(如果数据是整数,则会被自动转化成float)
- 行列下标都是从0开始,所以for循环从1开始就跳过了第0行的表头,而cell(row,2)实际是取第三列的数据
2. 通过xlwt模块写入数据
类似的,想往excel文件写入数据需要安装xlwt(pip install xlwt)并import
import xlwt
假设我们已有了一小、二小、三小的数据,需要写入,代码如下
my_file = xlwt.Workbook(encoding = 'utf-8')
titles = ['分数', '本段人数', '累计人数'] # 表头
sheet_name = ['一小', '二小', '三小'] # 每个工作表的名称
write_index = 0
for name in sheet_name:
table = my_file.add_sheet(name) # 增加一个工作表
print('table name ', name)
'写第一行,即表头'
for i in range(0, len(titles)):
table.write(0,i,titles[i])
'写数据行'
for i in range(0, len(per_point_label)):
table.write(i+1, 0, per_point_label[i]) # 分数
table.write(i+1, 1, per_point_data[write_index][i]) # 本段人数
table.write(i+1, 2, per_point_cum_data[write_index][i]) # 累计人数
write_index = write_index + 1
my_file.save('test.xls') #保存
如果保存的时候文件名是'xlsx',则用excel打开时会报错,无法打开,故存成xls格式