设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 93|回复: 25

Python把csv文件转换为excel文件

[复制链接]

3

主题

56

回帖

180

积分

注册会员

积分
180
发表于 2024-4-20 09:42:12 | 显示全部楼层 |阅读模式
目录


背景

由于其他部门给的数据是 csv 文件,业务人员一般都是熟悉 excel 文件,为了方便查看数据,因此需要写个程序,把 csv 文件转换为 excel 文件,由于是经常使用,小编的脚本程序,写成了在命令行中使用的方式
业务人员直接打开 csv 文件会乱码,因excel 默认的编码是 GB2312,其他部门给的基本都是 utf-8 编码,所以会乱码

完整脚本

为了方便在命令行中使用,该脚本使用了
  1. argparse
复制代码
库,如果对该库不是很懂,可以查看相关资料,进行学习
  1. """
  2. ===========================
  3. @Time : 2023/2/1 11:19
  4. @File : csv_to_excel.py
  5. @Software: PyCharm
  6. @Platform: Win10
  7. @Author : DataShare
  8. ===========================
  9. """
  10. import pandas as pd
  11. import argparse

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

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

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

  19.     if args.output_file is not None:
  20.         if args.output_file.endswith('.xlsx'):
  21.             output_file_converted = args.output_file
  22.         else:
  23.             output_file_converted = args.output_file + '.xlsx'
  24.     else:
  25.         output_file_converted = args.input_file.split('.csv')[0] + '.xlsx'

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

  32.     print('数据转换完成')
复制代码
使用教程

前提条件:

  • 需要把以上的完整脚本,复制下来保存为
    1. csv_to_excel.py
    复制代码
    文件
  • 本机安装了python,并且在命令行中可以直接使用
使用教程:
最好把
  1. csv_to_excel.py
复制代码
文件与将要转换的 csv 文件放到一个文件夹中
用法1:
只指定需要转换的 csv 文件,转换后的结果 excel 文件,默认与 csv 文件同名,且保存在同一个文件夹里面
  1. python csv_to_excel.py -in test.csv

  2. #python csv_to_excel.py --input_file test.csv
复制代码
用法2:
指定需要转换的 csv 文件,同时指定输出的 excel 结果文件名
  1. python csv_to_excel.py -in test.csv -out test_convert.xlsx

  2. #python csv_to_excel.py --input_file test.csv --output_file test_convert.xlsx
复制代码


xlwt 操作

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


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

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


  15. if __name__ == "__main__":
  16.     filename = "test1.csv"
  17.     xlsname ="res1.xls"
  18.     csv_xls(filename,xlsname)
复制代码
xlwt 库仅支持.xls 后缀,不支持.xlsx 后缀的excel 文件

openpyxl 操作

使用openpyxl 库将 csv 转成 .xlsx格式。
  1. from openpyxl import Workbook
  2. import datetime


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

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

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

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


  29. if __name__ == '__main__':
  30.     source = 'source.csv'
  31.     save = 'result.xlsx'
  32.     csv_to_xlsx_pd(sourcePath=source, savePath=save, encode='utf-8')
复制代码
数据量小于1w操作会比较快,数据量大于50w, workbook.save() 保持数据会很慢,有时候需要20-30分钟才能保存完成。

使用 pandas 转d

使用 pandas 将csv 转xlsx
  1. import pandas as pd


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

  5. #学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
  6. if __name__ == '__main__':
  7.     csv_to_xlsx_pd()
复制代码
数据量小于1w操作会比较快,数据量大于50w,保存会很慢。
到此这篇关于Python把csv文件转换为excel文件的文章就介绍到这了,更多相关Python csv转换为excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1

主题

64

回帖

149

积分

注册会员

积分
149
发表于 2024-4-22 11:12:43 | 显示全部楼层
谢谢你的提醒,我会注意的。

3

主题

69

回帖

205

积分

中级会员

积分
205
发表于 2024-5-9 08:56:18 | 显示全部楼层
6666666666

0

主题

67

回帖

135

积分

注册会员

积分
135
发表于 2024-5-28 18:30:26 | 显示全部楼层
太棒了!感谢分享这个信息!
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:13
  • 最近打卡:2024-05-10 17:32:55

4

主题

57

回帖

216

积分

中级会员

积分
216
发表于 2024-6-4 19:18:13 | 显示全部楼层
我想了解更多

1

主题

67

回帖

142

积分

注册会员

积分
142
发表于 2024-6-20 21:22:26 | 显示全部楼层
同意!

0

主题

45

回帖

91

积分

注册会员

积分
91
发表于 2024-7-4 05:55:49 | 显示全部楼层
已测试,非常不错

0

主题

58

回帖

115

积分

注册会员

积分
115
发表于 2024-7-7 07:38:14 | 显示全部楼层
牛逼

1

主题

48

回帖

120

积分

注册会员

积分
120
发表于 2024-7-7 19:04:52 | 显示全部楼层
能给个链接吗?我想深入了解一下。

3

主题

50

回帖

166

积分

注册会员

积分
166
发表于 2024-7-17 15:47:25 | 显示全部楼层
你的信息来源是?我想了解更多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-24 10:47 , Processed in 0.110469 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表