接触到爬虫之后,会发现数据量越来越大,在进行格式化数据清洗阶段就会出现很多的问题,因此用程序来进行数据清洗确实能节省很多的时间。处理excel文件分为读和写。分别用到xlrd和xlwt库。
读Excel表主要用到xlrd,这个库用起来十分方便,可以直接将excel看做二位数组。
需要注意的是,在处理excel时,经常遇到excel单元格内出现多余的空格与Tab键,这种单元格处理起来不易发现,建议使用strip()函数进行处理,这样处理起来的效果比较理想。
import xlrd
def read_excel():
# 打开文件
work_url = r'C:\Users\lenovo\Desktop\10.内科_过敏反应科.xlsx'
workbook = xlrd.open_workbook(work_url)
# 获取所有sheet
print(workbook.sheet_names()) # [u'sheet1', u'sheet2']
# 根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_index(0) # 通过元组索引顺序获取
# sheet1 = workbook.sheet()[0] # 通过列表索引顺序获取
# sheet1 = workbook.sheet_by_name(u'sheet1') # 通过名称获取
# sheet的名称,行数,列数
print(sheet1.name, sheet1.nrows, sheet1.ncols)
# 获取整行和整列的值(数组)
rows = sheet1.row_values(3) # 获取第四行内容
cols = sheet1.col_values(2) # 获取第三列内容
print(rows)
print(cols)
# 获取单元格内容
print(sheet1.cell(1, 0).value)
if __name__ == '__main__':
read_excel()
前面介绍读excel相当于只读形式,能够从excel中提取出相应的内容但不能写入。写excel文件则需要使用xlwt库来进行。
import xlwt
workbook = xlwt.Workbook(encoding = 'ascii') # 实例化一个Workbook
worksheet = workbook.add_sheet('My Worksheet') # 创建一个工作薄
worksheet.write(0, 0, label = '1') # 填充数据
workbook.save('Excel_Workbook.xls') # 保存数据
上面的代码可以完成简单的excel的写操作,当需要进行更为复杂的操作时,也可以用xlwt来进行书写,比如合并单元格、设置表格样式等。下面给出一个更复杂的例子,如果需要进行复杂操作可以在使用时查阅库介绍。
import xlwt
#设置表格样式
def set_style(name,height,bold=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style
#写Excel
def write_excel():
f = xlwt.Workbook()
sheet1 = f.add_sheet('学生',cell_overwrite_ok=True)
row0 = ["姓名","年龄","出生日期","爱好"]
colum0 = ["张三","李四","恋习Python","小明","小红","无名"]
#写第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
#写第一列
for i in range(0,len(colum0)):
sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))
sheet1.write(1,3,'2006/12/12')
sheet1.write_merge(6,6,1,3,'未知')#合并行单元格
sheet1.write_merge(1,2,3,3,'打游戏')#合并列单元格
sheet1.write_merge(4,5,3,3,'打篮球')
f.save('test.xls')
if __name__ == '__main__':
write_excel()
前面介绍了读操作和写操作,可以发现写操作时新建立excel表格进行写操作,那么如何像一个已有的文件中进行写操作。我们用一个实例来进行学习。
由于前面介绍了SnowNLP库(https://blog.csdn.net/weixin_44585839/article/details/90444593 ),因此相对商品评论进行情感分析,我使用爬虫对京东上的某商品下评论进行爬取,一共爬取350条评论,存储“京东商品评论”的excel中,局部截图如下:
在这里我希望从excel的第四列中(不包括第一行),取出评论并使用snownlp()函数进行分析,得到相关的情感系数并写入excel中。相关代码如下。
from xlrd import open_workbook
from xlwt import easyxf
from xlutils.copy import copy
import os
from snownlp import SnowNLP
url = r"C:\Users\lenovo\Desktop\Python\完整代码区\京东评论情感分析\京东商品评论.xlsx"
def nlp(work_url):
read_workbook = open_workbook(work_url)
write_workbook = copy(read_workbook)
sheet_read = read_workbook.sheet_by_index(0)
sheet_write = write_workbook.get_sheet(0)
sheet_write.write(0, 4, "sentiment")
line = sheet_read.nrows
for i in range(1, line):
txt = sheet_read.cell(i,3).value
sentiment = SnowNLP(txt)
sheet_write.write(i, 4, sentiment.sentiments)
os.remove(work_url)
write_workbook.save(work_url)
if __name__ == '__main__':
nlp(url)
经过运行,得到excel文件的效果为:
针对上述代码进行总结