(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正。)
面对疾风吧。
回首往昔,更进一步。
且随疾风前行,身后一许流星。
正文:
数据处理是Python的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python进行数据相关的工作时,难免要和 Excel 打交道。标准的 Excel 文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现。
以下内容均在Python3上实现,如果是Python2,则需要修改编码。
一、读Excel表(xlrd模块)
Xlrd模块只能用来读取数据操作,无法修改数据。
import xlrd #导入模块
data = xlrd.open_workbook(\'电影.xlsx\') #打开电影.xlsx文件读取数据
table = data.sheets()[0] #读取第一个(0)表单
#或者通过表单名称获取 table = data.sheet_by_name(u\'Sheet1\')
print(table.nrows) #输出表格行数
print(table.ncols) #输出表格列数
print(table.row_values(0)) #输出第一行
print(table.col_values(0)) #输出第一列
print(table.cell(0,2).value) #输出元素(0,2)的值
输出结果:
原Excel表格情况:
二、写Excel表(xlwt模块)
import xlwt #导入模块
wb = xlwt.Workbook(encoding = \'ascii\') #创建新的Excel(新的workbook),建议还是用ascii编码
ws = wb.add_sheet(\'weng\') #创建新的表单weng
ws.write(0, 0, label = \'hello\') #在(0,0)加入hello
ws.write(0, 1, label = \'world\') #在(0,1)加入world
ws.write(1, 0, label = \'你好\')
wb.save(\'weng.xls\') #保存为weng.xls文件
在py文件路径下出现了这个文件,内容为:
三、改Excel表(xlutils模块)
import xlrd #导入模块
from xlutils.copy import copy #导入copy模块
rb = xlrd.open_workbook(\'weng.xls\') #打开weng.xls文件
wb = copy(rb) #利用xlutils.copy下的copy函数复制
ws = wb.get_sheet(0) #获取表单0
ws.write(0, 0, \'changed!\') #改变(0,0)的值
ws.write(8,0,label = \'好的\') #增加(8,0)的值
wb.save(\'weng.xls\') #保存文件
修改后的Excel表为:
就写到这里吧,工作之余抽空写点,不足之处以后再补充吧。
关于python3中的追加写入excel问题,这个问题坑了我几小时,其实加一个参数即可。
因为之前有写好的excel,想追加写入,但是写入后却只有写入后的单元格格式,之前写的完全消失。
以下是我的代码
这代码可以用是我做的一个爬虫维护项目:
def times():
User_Agent = \'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\'
headers = {
\'User-Agent\': User_Agent
}
search_url = \'https://www.cnss.com.cn/u/cms/www/indexJson/bdi_month.json?v=1577414941357\'
request = urllib.request.Request(search_url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode(\'utf-8\')
content = \'\'.join(content)
# print(content)
# index = re.findall(\'index":"(.*?)"\', content) # 获取指数
date = re.findall(\'date":"(.*?)"\', content) # 获取时间
time = []
i = 0
start_date = date[0].replace(\'.\', \'年\')
start_date.replace(\'.\', \'月\')
end_date = date[-1].replace(\'.\', \'年\')
end_date.replace(\'.\', \'月\')
# print(index,date,start_date,end_date)
for j in range(int(len(date) / 1)):
temp = date[i:i + 1]
i += 1
time.append(temp)
hears = start_date + \'日\' + \'——\' + end_date + \'日\' + \'嘻嘻嘻\'
title=[\'交易日期\',\'干散货指数(BDI)\',\'海岬型指数(BCI)\',\'巴拿马型指数(BPI)\',\'超灵便型船运价指数(BSI)\',\'灵便型船指数(BHSI)\']
sheet1.write_merge(0, 0+0,0,0+5, hears, style)
for ti in range(len(title)):
sheet1.write(1, ti+0, title[ti], style)
for x in range(len(time)):
for y in range(len(time[x])):
sheet1.write(x + 2, 0, time[x][y], style)
f.save(\'你想放的路径.xls\')
123456789101112131415161718192021222324252627282930313233
上面的代码还是可以继续使用
标题xlwt的缺陷:
xlwt只能创建一个全新的excel文件,然后对这个文件进行写入内容以及保存。但是大多数情况下我们希望的是读入一个excel文件,然后进行修改或追加,这个时候就需要xlutils了。
xlutils的简单使用:
接下来的部分就是关键所在了
formatting_info=True这个参数能保留原excel格式
def write_excel_xls_append(path, value,u):
index = len(value) # 获取需要写入数据的行数
workbook = xlrd.open_workbook(\'./result/30波罗的海干散货运价指数.xls\',formatting_info=True) # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[0]) # 获取工作簿中所有表格中的的第一个表格
rows_old = worksheet.ncols # 获取表格中已存在的数据的行数
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
styleS = xlwt.XFStyle()
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
styleS.alignment = alignment
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格
for i in range(0, index):
for j in range(0, len(value[i])):
new_worksheet.write(i+2, u+1, value[i][j],styleS) # 追加写入数据,注意是从i+rows_old行开始写入
new_workbook.save(path) # 保存工作簿
————————
————————
树叶的一生,只是为了归根吗?
长路漫漫,惟剑做伴。
一剑,一念。