python3爬虫初探(六)之EXCEL

发布时间:2019-07-31 09:30:51编辑:auto阅读(1572)

     在爬取数据之后,数据的保存就成为一个新的问题,一般不太大的的数据存储到EXCEL就可以了。这里介绍一个python的第三方库——xlsxwriter.

    这个库的安装就不介绍了,pip就可以,不用FQ。这里仅介绍一些简单常用的命令。

     首先,说明一下,xlsxwriter只能写入数据,不能读取和修改数据(读取和修改可以用xlrd和xlwt)。上代码。

     

    import xlsxwriter
    
    workbook = xlsxwriter.Workbook("xlsx_test.xlsx") # 创建一个名为 xlsx_test.xlsx 的工作薄
    worksheet1 = workbook.add_worksheet("ID") # 新增一个工作表,可传入表名,不传默认为sheet1
    worksheet2 = workbook.add_worksheet("姓名") # 重复命令可新增多张数据表
    
    # 设置列的参数,20,10代表字符数
    worksheet1.set_column("A:A", 20)
    worksheet1.set_column('B:B', 10)
    
    # 插入数据,传入三个参数
    worksheet1.write(0, 0, "hello world!") # 三个参数分别为:行,列,数据。注意行列索引值从零开始。
    
    # 最后要关闭工作薄,完成数据的保存
    workbook.close()

    xlrd和xlwt操作Excel文件学习

    一、xlrd和xlwt的安装

            xlrd和xlwt是python的第三方库,所以是需要自己安装的,可以在python的官网https://pypi.python.org/pypi下载该模块来安装,也可以通过其他手段,比如easy_install或者pip,我在Win7环境下已经安装好pip,所以就在命令符窗口中用如下命令来安装xlrd和xlwt。

    pip install xlrd

    pip install xlwt

    运行过程如下:


    二、xlrd使用介绍

        1、导入模块
            import xlrd
       2、打开Excel文件读取数据
            data = xlrd.open_workbook('excelFile.xls')
       3、使用技巧
            获取一个工作表
            table = data.sheets()[0]          #通过索引顺序获取
            table = data.sheet_by_index(0) #通过索引顺序获取

            table = data.sheet_by_name(u'Sheet1')#通过名称获取


            获取整行和整列的值(数组)  
            table.row_values(i)
            table.col_values(i)
     
            获取行数和列数  
            nrows = table.nrows 
            ncols = table.ncols
           
            循环行列表数据
            for i in range(nrows):
                   print table.row_values(i)
     
            单元格
            cell_A1 = table.cell(0,0).value
            cell_C4 = table.cell(2,3).value
     
            使用行列索引
            cell_A1 = table.row(0)[0].value
            cell_A2 = table.col(1)[0].value
     
            简单的写入
            row = 0
            col = 0
     
            # 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
            ctype = 1 value = '单元格的值'
            xf = 0 # 扩展的格式化
            table.put_cell(row, col, ctype, value, xf)
            table.cell(0,0)  #单元格的值'
            table.cell(0,0).value #单元格的值'



    用例如下:
    1. # _*_ coding:utf-8 _*_  
    2.   
    3. #----------------------------------------------------------------------------  
    4. # import modules   
    5. #----------------------------------------------------------------------------  
    6. import os  
    7. import xlrd  
    8. from datetime import date,datetime  
    9.   
    10. #打开Excel文件  
    11. workbook = xlrd.open_workbook('09-10.11-38-12-HTTP-GOOD-1-Lte1sDataStat_Charts.xlsx')  
    12.   
    13. #输出Excel文件中所有sheet的名字  
    14. print workbook.sheet_names()  
    15.   
    16. #根据sheet索引或者名称获取sheet内容  
    17. Data_sheet    = workbook.sheets()[0]  
    18. CdfData_sheet = workbook.sheet_by_index(1)  
    19. Charts_sheet  = workbook.sheet_by_name(u'Charts')  
    20.   
    21. #获取sheet名称、行数和列数  
    22. print Data_sheet.name,    Data_sheet.nrows,    Data_sheet.ncols,\  
    23.       CdfData_sheet.name, CdfData_sheet.nrows, CdfData_sheet.ncols,\  
    24.       Charts_sheet.name,  Charts_sheet.nrows,  Charts_sheet.ncols  
    25.   
    26. #获取整行和整列的值(列表)      
    27. rows = Data_sheet.row_values(0#获取第一行内容  
    28. cols = Data_sheet.col_values(1#获取第二列内容  
    29. #print rows  
    30. #print cols  
    31.   
    32. #获取单元格内容  
    33. cell_A1 = Data_sheet.cell(0,0).value  
    34. cell_C1 = Data_sheet.cell(0,2).value  
    35. cell_B1 = Data_sheet.row(0)[1].value  
    36. cell_D2 = Data_sheet.col(3)[1].value  
    37. print cell_A1, cell_B1, cell_C1, cell_D2  
    38.   
    39. #获取单元格内容的数据类型  
    40. #ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error  
    41. print 'cell(0,0)数据类型:', Data_sheet.cell(0,0).ctype  
    42. print 'cell(1,0)数据类型:', Data_sheet.cell(1,0).ctype  
    43. print 'cell(1,1)数据类型:', Data_sheet.cell(1,1).ctype  
    44. print 'cell(1,2)数据类型:', Data_sheet.cell(1,2).ctype  
    45.   
    46. #获取单元格内容为日期的数据  
    47. date_value = xlrd.xldate_as_tuple(Data_sheet.cell_value(1,0),workbook.datemode)  
    48. print date_value  
    49. print '%d:%d:%d' %(date_value[3:])  
    50.   
    51. d = {'11:25:59':[123], '11:26:00':[234], '11:26:01':[345]}  
    52. print d['11:25:59']  
    53. print d['11:26:00']  
    54. print d['11:26:01']  
    55.   
    56. print d['11:25:59'][0]  
    57. print d['11:26:00'][0]  
    58. print d['11:26:01'][0]  

    三、xlwt使用介绍

    Xlwt简介
    功能:用于生成97/2000/XP/2003xls文件。
    Python版本:Python2.3 to 2.7
    当前版本:0.7.5
    平台:跨平台
            
    相关模块
    csv             python标准模块。推荐。
    xlrd            读取 .xls, .xlsx 文件。
    xlutils       xlrd和xlwt的集合。
    openpyxl 读写 Excel 2007 xlsx/xlsm文件 。纯python,效率不高。
    Matplotlib      2D作图模块,适用于基于excel作图。
    Pywin32   python windows扩展 ,不跨平台,通过COM口连接excel。
    Pyxll           在excel中使用python替代vbs。http://www.pyxll.com/。类似模块有pyinex。Python For Excel http://www.opentradingsystem.com/PythonForExcel/main.html
    XlsxWriter      写xlsx文件。纯python。
     
    快速入门
    下面例子,创建一个名为mini.xls的文件,它有一个空sheet:'xlwt was here'。代码见mini.py。
    fromxlwt import *
    w =Workbook()
    ws = w.add_sheet('xlwtwas here')
    w.save('mini.xls') 

    Workbook类初始化时有encoding和style_compression参数。

    encoding,设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。当然要记得在文件头部添加:

    # -*- coding: utf-8-*-

    style_compression 表示是否压缩,不常用。
    Workbook 还有一些属性:
    Owner 设置文档所有者。
    country_code: 国家码
    wnd_protect: 窗口保护
    obj_protect: 对象保护
    Protect: 保护
    backup_on_save: 保存时备份
    Hpos: 横坐标
    Vpos: 纵坐标
    Width: 宽度
    Height: 高度
    active_sheet: 活动sheet
    tab_width: tab宽度
    wnd_visible: 窗口是否可见
    wnd_mini: 窗口最小化
    hscroll_visible: 横向滚动条是否可见。
    vscroll_visible: 纵向滚动条是否可见。
    tabs_visible: tab是否可见。
    dates_1904: 是否使用1904日期系统
    use_cell_values: 单元格的值
    default_style: 默认样式
    colour_RGB: 颜色

    方法有:add_style,add_font,add_str,del_str,str_index,add_rt,rt_index,add_sheet,get_sheet,raise_bad_sheetname,convert_sheetindex,setup_xcall,add_sheet_reference。


    用例如下

    1. # _*_ coding:utf-8 _*_  
    2.   
    3. #----------------------------------------------------------------------------  
    4. # import modules   
    5. #----------------------------------------------------------------------------  
    6. import os  
    7. import xlwt           
    8.   
    9.   
    10. def set_style(name, height, bold = False):  
    11.     style = xlwt.XFStyle()   #初始化样式  
    12.       
    13.     font = xlwt.Font()       #为样式创建字体  
    14.     font.name = name  
    15.     font.bold = bold  
    16.     font.color_index = 4  
    17.     font.height = height  
    18.       
    19.     style.font = font  
    20.     return style  
    21.   
    22.       
    23. def write_excel():  
    24.     #创建工作簿  
    25.     workbook = xlwt.Workbook(encoding='utf-8')    
    26.     #创建sheet  
    27.     data_sheet = workbook.add_sheet('demo')    
    28.     row0 = [u'字段名称', u'大致时段''CRNTI''CELL-ID']  
    29.     row1 = [u'测试''15:50:33-15:52:14'227064190202]  
    30.       
    31.     #生成第一行和第二行  
    32.     for i in range(len(row0)):  
    33.         data_sheet.write(0, i, row0[i], set_style('Times New Roman'220True))  
    34.         data_sheet.write(1, i, row1[i], set_style('Times New Roman'220True))  
    35.       
    36.     #保存文件  
    37.     workbook.save('demo.xls')     
    38.       
    39.       
    40. if __name__ == '__main__':   
    41.     write_excel()  
    42.     print u'创建demo.xlsx文件成功'  

    参考资料

    下载地址:https://pypi.python.org/pypi/xlwt/0.7.5

    官方网址:http://www.python-excel.org/

    介绍胶片:http://www.simplistix.co.uk/presentations/python-excel.pdf


关键字