Python将csv转换为xlsx

use*_*186 38 python csv excel file xlsx

这篇文章中有一个Python示例从csv转换为xls.

但是,我的文件有超过65536行,所以xls不起作用.如果我将文件命名为xlsx,它并没有什么区别.是否有Python包转换为xlsx?

ale*_*cxe 69

这是使用xlsxwriter的示例:

import os
import glob
import csv
from xlsxwriter.workbook import Workbook


for csvfile in glob.glob(os.path.join('.', '*.csv')):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'rt', encoding='utf8') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
    workbook.close()
Run Code Online (Sandbox Code Playgroud)

仅供参考,还有一个名为openpyxl的软件包,可以读/写Excel 2007 xlsx/xlsm文件.

希望有所帮助.

  • 感谢这个非常有用的代码段。在使用大文件时,最好使用“ constant_memory”来控制内存的使用,例如:`workbook = Workbook(csvfile +'.xlsx',{'constant_memory':True})`。参考:http://xlsxwriter.readthedocs.org/en/latest/working_with_memory.html (2认同)
  • 很好......但是,创建的xlsx文件中包含所有数字字段,这些字段存在错误,字段存储为文本而不是数字... (2认同)
  • 在这里找到了修复数字的文本问题:http://stackoverflow.com/questions/24971556/openpyxl-python-writing-csv-to-excel-gives-number-formatted-as-text (2认同)
  • @MrMobileMan最好使用xlsxwriter构造器选项`strings_to_numbers`。例如,`workbook = Workbook('output.xlsx',{'strings_to_numbers':True})` (2认同)

chf*_*hfw 28

有了我的图书馆pyexcel,

 $ pip install pyexcel pyexcel-xlsx
Run Code Online (Sandbox Code Playgroud)

您可以在一个命令行中执行此操作:

from pyexcel.cookbook import merge_all_to_a_book
# import pyexcel.ext.xlsx # no longer required if you use pyexcel >= 0.2.2 
import glob


merge_all_to_a_book(glob.glob("your_csv_directory/*.csv"), "output.xlsx")
Run Code Online (Sandbox Code Playgroud)

每个csv都有自己的工作表,名称将是他们的文件名.


zhu*_*ren 10

from openpyxl import Workbook
import csv


wb = Workbook()
ws = wb.active
with open('test.csv', 'r') as f:
    for row in csv.reader(f):
        ws.append(row)
wb.save('name.xlsx')
Run Code Online (Sandbox Code Playgroud)


pat*_*ng1 6

添加专门使用pandas库读取.csv文件并保存为.xlsx文件的答案.此示例使用pandas.read_csv(链接到文档)和pandas.dataframe.to_excel(链接到文档).

完全可重现的示例使用numpy仅生成随机数,如果您想使用自己的.csv文件,则可以删除此项.

import pandas as pd
import numpy as np

# Creating a dataframe and saving as test.csv in current directory
df = pd.DataFrame(np.random.randn(100000, 3), columns=list('ABC'))
df.to_csv('test.csv', index = False)

# Reading in test.csv and saving as test.xlsx

df_new = pd.read_csv('test.csv')
writer = pd.ExcelWriter('test.xlsx')
df_new.to_excel(writer, index = False)
writer.save()
Run Code Online (Sandbox Code Playgroud)


小智 6

使用 pandas 的简单两行代码解决方案

  import pandas as pd

  read_file = pd.read_csv ('File name.csv')
  read_file.to_excel ('File name.xlsx', index = None, header=True)
Run Code Online (Sandbox Code Playgroud)

  • 这可能是更**OP**的做法。 (2认同)

Lar*_*y W 6

简单的一对一 CSV 到 XLSX 文件转换,无需枚举/循环行:

import pyexcel

sheet = pyexcel.get_sheet(file_name="myFile.csv", delimiter=",")
sheet.save_as("myFile.xlsx")
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 我发现如果 file_name 真的很长(> 30 个字符,不包括路径),那么当 Excel 尝试加载生成的 XLSX 文件时,它会抛出错误。Excel 会主动修复它所造成的错误,但令人沮丧。
  2. 之前提供了一个很好的答案,它将目录中的所有 CSV 文件合并到一个 XLSX 工作簿中,这适合不同的用例,而不仅仅是尝试进行一对一的 CSV 文件到 XLSX 文件的转换。