Python把csv文件转换为excel文件

 更新时间:2024年04月01日 10:37:43   作者:数据人阿多  
本文主要介绍了Python把csv文件转换为excel文件,可以使用xlrd,xlrwt,openpyxl,xlwings,pandas 等库操作 Excel,具有一定的参考价值,感兴趣的可以了解一下

背景

由于其他部门给的数据是 csv 文件,业务人员一般都是熟悉 excel 文件,为了方便查看数据,因此需要写个程序,把 csv 文件转换为 excel 文件,由于是经常使用,小编的脚本程序,写成了在命令行中使用的方式

业务人员直接打开 csv 文件会乱码,因excel 默认的编码是 GB2312,其他部门给的基本都是 utf-8 编码,所以会乱码

完整脚本

为了方便在命令行中使用,该脚本使用了 argparse 库,如果对该库不是很懂,可以查看相关资料,进行学习

"""
===========================
@Time : 2023/2/1 11:19
@File : csv_to_excel.py
@Software: PyCharm
@Platform: Win10
@Author : DataShare
===========================
"""
import pandas as pd
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='csv_to_excel')
    parser.add_argument('--input_file', '-in', type=str, required=True, help='csv文件')
    parser.add_argument('--output_file', '-out', type=str, required=False, default=None, help='excel文件')
    args = parser.parse_args()

    data = pd.read_csv(args.input_file, sep=',', dtype='str', quotechar='"', header=0)

    print('csv文件行数为:', len(data))  # 判断数据行数是否一致,防止不可见字符,例如:回车 等

    if args.output_file is not None:
        if args.output_file.endswith('.xlsx'):
            output_file_converted = args.output_file
        else:
            output_file_converted = args.output_file + '.xlsx'
    else:
        output_file_converted = args.input_file.split('.csv')[0] + '.xlsx'

    # 这是由于Excel单个工作表限制URL类型数据量为65530,超出的部分会被舍弃
    # 只要将strings_to_urls自动转换功能关闭就好了
    writer = pd.ExcelWriter(output_file_converted, engine='xlsxwriter',
                            engine_kwargs={'options': {'strings_to_urls': False}})
    data.to_excel(writer, index=False)
    writer.close()

    print('数据转换完成')

使用教程

前提条件:

  • 需要把以上的完整脚本,复制下来保存为 csv_to_excel.py 文件
  • 本机安装了python,并且在命令行中可以直接使用

使用教程:

最好把 csv_to_excel.py 文件与将要转换的 csv 文件放到一个文件夹中

用法1:
只指定需要转换的 csv 文件,转换后的结果 excel 文件,默认与 csv 文件同名,且保存在同一个文件夹里面

python csv_to_excel.py -in test.csv

#python csv_to_excel.py --input_file test.csv

用法2:
指定需要转换的 csv 文件,同时指定输出的 excel 结果文件名

python csv_to_excel.py -in test.csv -out test_convert.xlsx

#python csv_to_excel.py --input_file test.csv --output_file test_convert.xlsx

使用教程

xlwt 操作

使用xlwt 操作 excel, 保存 .xls 后缀的文件

import xlwt


def csv_xls(filename, xlsname):
    f = open(filename, 'r', encoding='utf-8')
    xls = xlwt.Workbook()
    sheet = xls.add_sheet('sheet1', cell_overwrite_ok=True)
    x = 0
    for line in f:

        for i in range(len(line.split(','))):
            print(i)
            item = line.split(',')[i]
            sheet.write(x, i, item)
        x += 1
    f.close()
    xls.save(xlsname)


if __name__ == "__main__":
    filename = "test1.csv"
    xlsname ="res1.xls"
    csv_xls(filename,xlsname)

xlwt 库仅支持.xls 后缀,不支持.xlsx 后缀的excel 文件

openpyxl 操作

使用openpyxl 库将 csv 转成 .xlsx格式。

from openpyxl import Workbook
import datetime


def csv_to_xlsx_pd(sourcePath:str,savePath:str,encode='utf-8'):
    """将csv 转为 excel(.xlsx格式)
    如果不需要可以把计时相关代码删除
    Args:
        sourcePath:str 来源文件路径
        savePath:str 保存文件路径,需要包含保存的文件名,文件名需要是 xlsx 格式的
        encode='utf-8' 默认编码,可以改为需要的编码如gbk
    """
    print('开始处理%s' % sourcePath)
    curr_time = datetime.datetime.now()
    print(curr_time)

    f = open(sourcePath, 'r', encoding=encode)
    # 创建一个workbook 设置编码
    workbook = Workbook()
    # 创建一个worksheet
    worksheet = workbook.active
    workbook.title = 'sheet'

    for line in f:
        row = line.split(',')
        worksheet.append(row)
        # if row[0].endswith('00'):    # 每一百行打印一次
        #     print(line, end="")

    workbook.save(savePath)
    print('处理完毕')
    curr_time2 = datetime.datetime.now()
    print(curr_time2-curr_time)


if __name__ == '__main__':
    source = 'source.csv'
    save = 'result.xlsx'
    csv_to_xlsx_pd(sourcePath=source, savePath=save, encode='utf-8')

数据量小于1w操作会比较快,数据量大于50w, workbook.save() 保持数据会很慢,有时候需要20-30分钟才能保存完成。

使用 pandas 转d

使用 pandas 将csv 转xlsx

import pandas as pd


def csv_to_xlsx_pd():
    csv = pd.read_csv('source.csv', encoding='utf-8')
    csv.to_excel('result.xlsx', sheet_name='data')

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
if __name__ == '__main__':
    csv_to_xlsx_pd()

数据量小于1w操作会比较快,数据量大于50w,保存会很慢。

到此这篇关于Python把csv文件转换为excel文件的文章就介绍到这了,更多相关Python csv转换为excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Keras神经网络efficientnet模型搭建yolov3目标检测平台

    Keras神经网络efficientnet模型搭建yolov3目标检测平台

    这篇文章主要为大家介绍了Keras利用efficientnet系列模型搭建yolov3目标检测平台的过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 使用Matplotlib绘制平行坐标系的示例详解

    使用Matplotlib绘制平行坐标系的示例详解

    平行坐标系,是一种含有多个垂直平行坐标轴的统计图表,这篇文章主要为大家介绍了如何使用绘制平行坐标系,需要的小伙伴可以参考一下
    2023-07-07
  • Python islower()函数的使用详解

    Python islower()函数的使用详解

    这篇文章主要介绍了Python islower()函数使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • pytorch--之halfTensor的使用详解

    pytorch--之halfTensor的使用详解

    这篇文章主要介绍了pytorch--之halfTensor的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python生成器,可迭代对象,迭代器区别和联系

    python生成器,可迭代对象,迭代器区别和联系

    这篇文章主要介绍了python生成器,可迭代对象,迭代器区别和联系,通过对比用法让大家更加深入理解相关知识,需要的朋友参考学习下吧。
    2018-02-02
  • Python趣味编程实现手绘风视频示例

    Python趣味编程实现手绘风视频示例

    本文与计算机视觉相关,使用Python将图片由自然风转化为手绘风,期间未对图片进行任何预处理、后处理;代码中只借助了两个常见库,核心计算由Numpy负责 ,Pillow 负责图片读写
    2021-10-10
  • python中的信号通信 blinker的使用小结

    python中的信号通信 blinker的使用小结

    信号是一种通知或者说通信的方式,信号分为发送方和接收方,信号的特点就是发送端通知订阅者发生了什么,今天通过本文给大家介绍python中的信号通信 blinker的相关知识,感兴趣的朋友一起看看吧
    2021-10-10
  • 基于PyQt制作小红书图片抓取工具

    基于PyQt制作小红书图片抓取工具

    这篇文章主要为大家详细介绍了如何基于PyQt制作一个小红书图片抓取工具,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • pycharm进入科学模式以及退出方式

    pycharm进入科学模式以及退出方式

    这篇文章主要介绍了pycharm进入科学模式以及退出方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • CentOS 7.9 安装 Python 3.10 详细步骤及常见错误解决方案

    CentOS 7.9 安装 Python 3.10 详细步骤及常见错误

    CentOS7.9安装Python3.10需升级OpenSSL至1.1.1,配置编译参数并使用altinstall避免覆盖Python2.7,设置环境变量修复yum冲突,处理依赖缺失及模块编译错误,优化pip源以提升兼容性,本文给大家介绍CentOS 7.9 安装 Python 3.10 详细步骤及常见错误,感兴趣的朋友一起看看吧
    2025-06-06

最新评论