zoukankan      html  css  js  c++  java
  • openpyxl/csv--python处理excel表格模块

    #conding='utf-8'
    #属性方法参考:https://zhuanlan.zhihu.com/p/43186995 #Workbook ;worksheet;active;load_workbook;cell;value;rows;append

    """

    workbook对象属性:
    • active:获取当前活跃的Worksheet
    • worksheets:以列表的形式返回所有的Worksheet(表格)
    • read_only:判断是否以read_only模式打开Excel文档
    • encoding:获取文档的字符集编码
    • properties:获取文档的元数据,如标题,创建者,创建日期等
    • sheetnames:获取工作簿中的表(列表)
    workbook对象方法:
    • get_sheet_names:获取所有表格的名称(新版已经不建议使用,通过Workbook的sheetnames属性即可获取)   ws = wb["frequency"] ==   ws2 = wb.get_sheet_by_name('frequency')
    • get_sheet_by_name:通过表格名称获取Worksheet对象(新版也不建议使用,通过Worksheet[‘表名‘]获取)
    • get_active_sheet:获取活跃的表格(新版建议通过active属性获取)
    • remove_sheet:删除一个表格
    • create_sheet:创建一个空的表格
    • copy_worksheet:在Workbook内拷贝表格

    worksheet对象属性:
    • title:表格的标题
    • dimensions:表格的大小,这里的大小是指含有数据的表格的大小,即:左上角的坐标:右下角的坐标
    • max_row:表格的最大行
    • min_row:表格的最小行
    • max_column:表格的最大列
    • min_column:表格的最小列
    • rows:按行获取单元格(Cell对象) - 生成器
    • columns:按列获取单元格(Cell对象) - 生成器
    • freeze_panes:冻结窗格
    • values:按行获取表格的内容(数据) - 生成器

    worksheet对象方法:
    • iter_rows:按行获取所有单元格,内置属性有(min_row,max_row,min_col,max_col)
    • iter_columns:按列获取所有的单元格
    • append:在表格末尾添加数据
    • merged_cells:合并多个单元格
    • unmerged_cells:移除合并的单元格
    
    

     Cell对象:

     

    • row:单元格所在的行
    • column:单元格坐在的列
    • value:单元格的值 返回字符串格式数据,可应用字符串方法
    • coordinate:单元格的坐标
    """



    import  openpyxl
    #test1:新建excel
    #1.创建工作簿
    wb=openpyxl.Workbook()
    
    #2.找到当前工作簿中处于激活状态的工作表
    ws=wb.active
    #print(ws)   <Worksheet "Sheet">
    #也可以使用create_sheet方法
    #ws1=wb.create_sheet('工作1')
    #print(ws1) <Worksheet "工作1">name为工作1的sheet
    
    #3.查看工作表标题文字属性;也可进行赋值操作
    print(ws.title) #"Sheet"
    #查看当前工作簿下所有工作表名
    print(wb.sheetnames) #返回一个列表
    
    #4.操作
    #设置某一单元格内容
    ws['A1']=41
    ws['c1']='姓名'
    ws.cell(row=7,column=3,value='("python","123456")')
    

    #写入一行 ws.append([1,2,3,4])
    data
    =[(1,'tom',90), (2,'ham',153), (3,'fs',153), (4,'hha',133) ] ##这里注意写入数据会在接在上面写入的位置之后,根据行列的情况继续向下写 print('---方法一、写入一个序列数据--') #通过enumerate获取index进行数据写入 for i,row in enumerate(data): for j,col in enumerate(row): ws.cell(row=i+2,column=j+1,value=col) print('----方法二、写入一个序列数据--------') #(append方法) for i,row in enumerate(data): ws.append(row) #保存文件 wb.save('test_creat_excel.xlsx') #打开工作簿 wb=openpyxl.load_workbook('case.xlsx') #选择工作表对象 #a查看所有表名称 print(wb.sheetnames) #创建表一对象 ws=wb['表一'] #修改表名称 #ws.title='新建表格1' #print(wb.sheetnames) #读取表内信息 #A.cell()方法获取单元格数据 data =ws.cell(row=5,column=4) #value方法获得内容,获取D5的值 print(data,'的值为',data.value)

    #通过列表单元格获取对象同样返回所有行元组对象
    #ws['A1':'C6']
    print(ws['A1':'C6'])
    """

     ((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>),
     (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>),
     (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>),
     (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>),
     (<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>),
     (<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>))

    """

    #读取行列信息返回单行/列元组对象,不具有value属性
    #通过迭代ws.rows方法读取所有行信息 print('----ws.rows------') row_list=ws.rows for i in row_list: print(i)# (<Cell '表一'.A1>, <Cell '表一'.B1>, <Cell '表一'.C1>, <Cell '表一'.D1>) print('---ws.columns----')
    #通过迭代ws.columns方法获取所有列信息 columns_list=ws.columns for i in columns_list: print(i)
    #
    通过迭代ws.rows方法读取,读取第一列value数据

    #如:提取第一列数据

     import openpyxl
      wb=openpyxl.load_workbook('进程.xlsx')
      ws=wb.active
      for row in ws.rows:
      print(row[0].value)

    """
    None
    None
    一人之下
    None
    None
    完美世界
    None
    火影忍者
    None
    None
    天刀
    """

     

    print('---ws.cell()错误用法-----')
    #这里ws.rows;ws.column都是迭代器,因此没有len()
    """for r in range(len(row_list)):
        for c in range(len(columns_list)):
            print(ws.cell(row=r, column=c).value)
    """
    #通过max_row和max_column的len()方法获取长度迭代
    print('-----方法一、ws.cell().value读取全部数据---------')
    for r in range(1,ws.max_row):
        for c in range(ws.max_column):
           data=ws.cell(row=r,column=c+1).value #Row or column values must be at least 至少要第二行起
              print(data,end='	')
        print(end='
    ')

    print('-----------方法二、已知列数,通过row检索的方式获得row.value-----------------------')
    for row in ws.rows:
    #这里的row[0],指向行元组中对的第一个cell,获得
    print(row[0].value,row[1].value,row[2].value,row[3].value)
    #通过enumerate的方式读取, 所有数据

     import openpyxl
     wb=openpyxl.load_workbook('test.xlsx')
     ws=wb.active
     for index,row in enumerate(ws.rows):
       for i,col in enumerate(row):
        if row[i].value !=None:
          print(row[i].value,end='')
       print('')

    """

    由于最后一行会出现None,为了不打印None故进行了判断

    时间地点人物年龄
    44113上海王王12
    44173北京智能13
    43832东京张三23
    44028河北李静16
    43897山西能者18

    """

     

     csv模块

    csv测试数据时,可以以文件形式进行读写('r','w')

    import csv
    #写入
    f=open(r'C:UsersAdministratorDesktop	est.csv','a')
    cont=csv.writer(f)
    data=['id','name','age','sex']
    #写入列表数据
    cont.writerow(data)f.close()

    #写入元组数据
    data2=('1001','小王','20','男')
    cont.writerow(data2)
    f.close()

     

    #写入列表集数据
    data3=[['1002','小张','20','女'],['1003','小李','19','男'],['1004','小红','13','男']]
    cont.writerows(data3)
    f.close()

     #注意:打印会出现空行,需要在打开文件时,在open内需要重写参数newline(newline=''

    f=open(r'C:UsersAdministratorDesktop est.csv','a',newline='')
    cont=csv.writer(f)
    data=['id','name','age','sex']
    #写入列表集数据

    #writerow 与 writerows的区别

    import csv
    file=open('csv_test.csv','a',newline='')
    writer=csv.writer(file)
    data=['test','13','133','44','78']#python中的int类型在写入csv报错,变为str即可
    #writerow 与writerows的区别
    print('----writerow----')
    writer.writerow(data)
    print('----writerows----')
    writer.writerows(data)

    #1.使用writerows写入数据集数据

    data3=[['1002','小张','20','女'],['1003','小李','19','男'],['1004','小红','13','男']]
    cont.writerows(data3)
    f.close()

    #2.使用writerow迭代写入数据集内单元数据
    for i in data3:
    cont.writerow(i)

    f.close()

    #读取数据

    f=open(r'C:UsersAdministratorDesktop est.csv','r')

    cont=csv.reader(f)

    for i in cont:

           print(i)

    """

    ['id', 'name', 'age', 'sex']
    ['1002', '小张', '20', '女']
    ['1003', '小李', '19', '男']
    ['1004', '小红', '13', '男']

    """

    #字典类型数据写入

    datas = [{'name': 'Bob', 'age': 23},{'name': 'Jerry', 'age': 44},{'name': 'Tom', 'age': 15} ]

     

    with open('test_csv_data.csv', 'w', newline='') as f:

         writer = csv.DictWriter(f, ['name', 'age'])# 标头在这里传入,作为第一行数据

         writer.writeheader()

         for row in datas:

            writer.writerow(row)

            # 还可以写入多行

            #writer.writerows(datas)

     #字典类型数据读取

    with open('test_csv_data.csv','r') as f:

         reader = csv.DictReader(f)

         for row in reader:

             print(row['name'], row['age'])

    """

    Bob 23
    Jerry 44
    Tom 15

    """

    1.  
  • 相关阅读:
    vim编辑器下nginx.conf语法高亮
    Spring Boot 警告:An illegal reflective access operation has occurred
    Idea使用 MyBatis Generator 插件快速生成代码
    SpringBoot 自定义线程池处理异步任务
    idea 处理mybatis的mapper.xml警告提示信息让其不显示
    mybatis 报文档根元素 "mapper" 必须匹配 DOCTYPE 根 "null"
    zookeeper生成分布式自增ID
    Navicat卸载注册表 激活码
    mybatis自定义TypeHandler实现list转string
    Java创建ES索引实现
  • 原文地址:https://www.cnblogs.com/yescarf/p/13751253.html
Copyright © 2011-2022 走看看