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.  
原文地址:https://www.cnblogs.com/yescarf/p/13751253.html