【python应用】excel文件转csv

0. 使用库

xlsx文件解析处理: openpyxl库

csv文件格式生成:csv

1. 导入openpyxl模块

import openpyxl #导入模块openpyxl

openpyxl是第三方模块,需要先安装

pip install openpyxl

2. 读取文件

workbook = openpyxl.load_workbook('info.xlsx') #获取表格文件

excel_内容.png

3. 获取目标sheet

sheet:EXCEL默认打开时一般有多个工作表:Sheet1Sheet2Sheet3…,Sheet1是其中的一个工作表。如果需要的话,可以在工作簿中新建多个工作表。

excel_sheet.png

获取工作簿中所有工作表名称
import openpyxl 
workbook = openpyxl.load_workbook('info.xlsx') #获取表格文件
sheets = workbook.sheetnames
print(sheets,type(sheets))
print(sheets[0])

结果:

[‘info’, ‘Sheet1’, ‘Sheet2’] <class ‘list’>
info

知道目标sheet名称
import openpyxl 
workbook = openpyxl.load_workbook('info.xlsx') #获取表格文件
workbook_sheet = workbook["info"] #获取表单
print(workbook_sheet.cell(row=1,column=1).value) #输出表单第一行第一列的值

结果:

电影名

注意:get_sheet_by_name()方法已经未使用了,继续使用会出现警告:DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).

案例:

import openpyxl 
workbook = openpyxl.load_workbook('info.xlsx') #获取表格文件
workbook_sheet = workbook.get_sheet_by_name("info") #获取表单
print(workbook_sheet.cell(row=1,column=1).value) #输出表单第一行第一列的值
"""
输出结果
e:\python\shuju\ceshi.py:3: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  workbook_sheet = workbook.get_sheet_by_name("info") #获取表单
电影名
"""
获取活跃sheet
import openpyxl 

workbook = openpyxl.load_workbook('info.xlsx') #获取表格文件
workbook_sheet = workbook.active #获取活跃表格
print(workbook_sheet.title)  #获取活跃表格名称

结果:

info

遇到的问题

1、处理数据时,正常存储显示的中文在写入到csv文件时变成了乱码,文件的编码未能正确处理中文,需要在写入csv文件时指定编码。

2、写入多出一行空白行

with open(filename, 'a', newline='', encoding='utf-8-sig') as f: 

完整代码

def xlsx_to_csv(filename1, filename2):
    workbook = openpyxl.load_workbook(filename1)
    table = workbook.active
    # utf-8-sig: 可以解决中文乱码问题
    with open(filename2,"w", encoding="utf-8-sig") as f:
        write = csv.writer(f)
        data = []
        for i in range(1,table.max_row+1):
            row_stack = []
            for j in range(1,table.max_column+1):
                row_stack.append(table.cell(row=i,column=j).value)
            data.append(row_stack)
        write.writerows(data)
  • 10
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值