用python將csv轉excel (.xls和.xlsx)的幾種方式

excel 後綴有2種格式, .xls 是從 Excel 97 到 Excel 2003 的默認文件格式,而 .xlsx 是 Excel 2007 及更高版本的默認文件格式。
.xlsx和.xls格式的主要區別在於,.xls格式單個工作表最多支持65536行,256列。
.xlsx格式最多支持1048576行,16384列。
此外就是,存儲同樣多的數據,.xlsx格式文件更小。基本就這兩點區別。

處理excel

python 可以使用xlrd,xlrwt,openpyxl,xlwings,pandas 等庫操作 Excel 。

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,保存會很慢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章