Python将csv转换为xlsx

Python将csv转换为xlsx,python,excel,file,csv,xlsx,Python,Excel,File,Csv,Xlsx,在中,有一个Python示例可以将csv转换为xls 但是,我的文件有超过65536行,因此xls无法工作。如果我把文件命名为xlsx,它不会有什么不同。是否有要转换为xlsx的Python包?下面是一个使用以下命令的示例: 仅供参考,还有一个名为的包,可以读取/写入Excel2007XLSX/xlsm文件 希望对您有所帮助。使用我的库pyexcel $ pip install pyexcel pyexcel-xlsx 您可以在一个命令行中执行此操作: from pyexcel.cookbo

在中,有一个Python示例可以将csv转换为xls

但是,我的文件有超过65536行,因此xls无法工作。如果我把文件命名为xlsx,它不会有什么不同。是否有要转换为xlsx的Python包?

下面是一个使用以下命令的示例:

仅供参考,还有一个名为的包,可以读取/写入Excel2007XLSX/xlsm文件


希望对您有所帮助。

使用我的库
pyexcel

 $ pip install pyexcel pyexcel-xlsx
您可以在一个命令行中执行此操作:

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")

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

我如何使用openpyxllib:

import csv
from openpyxl import Workbook

def convert_csv_to_xlsx(self):
    wb = Workbook()
    sheet = wb.active

    CSV_SEPARATOR = "#"

    with open("my_file.csv") as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                for idx, val in enumerate(col.split(CSV_SEPARATOR)):
                    cell = sheet.cell(row=r+1, column=idx+1)
                    cell.value = val

    wb.save("my_file.xlsx")

首先安装openpyxl:

pip install openpyxl
然后:

有一个简单的方法

import os
import csv
import sys

from openpyxl import Workbook

reload(sys)
sys.setdefaultencoding('utf8')

if __name__ == '__main__':
    workbook = Workbook()
    worksheet = workbook.active
    with open('input.csv', 'r') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                for idx, val in enumerate(col.split(',')):
                    cell = worksheet.cell(row=r+1, column=c+1)
                    cell.value = val
    workbook.save('output.xlsx')

添加专门使用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()

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

  import pandas as pd

  read_file = pd.read_csv ('File name.csv')
  read_file.to_excel ('File name.xlsx', index = None, header=True)

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

import pyexcel

sheet = pyexcel.get_sheet(file_name="myFile.csv", delimiter=",")
sheet.save_as("myFile.xlsx")
注:

  • 我发现如果文件名很长(>30个字符,不包括路径) 当Excel尝试时,生成的XLSX文件将抛出一个错误 加载它。Excel将提供修复错误的功能,但是 这令人沮丧
  • 以前有一个很好的答案,前提是 将目录中的所有CSV文件合并到一个XLSX工作簿中, 它适合不同的用例,而不仅仅是尝试使用1对1的CSV文件 XLSX文件转换

  • 感谢您提供这段非常有用的代码片段。在使用大文件时,最好使用“常量内存”来控制内存使用,例如:
    workbook=workbook(csvfile+'.xlsx',{'constant\u memory':True})
    。裁判:很好。。。但是,创建的xlsx文件中充满了所有数字字段,这些字段都有错误,这些字段被存储为文本而不是数字…在这里找到了一个解决数字作为文本问题的方法:我必须添加这些行,以便与西欧语言import sys reload(sys)sys.setdefaultencoding('latin-1')一起工作@MrMobileMan最好使用xlsxwriter构造函数选项
    strings\u to\u numbers
    。例如,
    workbook=workbook('output.xlsx',{'strings\u to\u numbers':True})
    非常好。。。谢谢我把这个投了赞成票。然而,我遇到的一个问题是,这个和xlswriter都会创建xlsx的全部错误,即文本字段被格式化为文本而不是数字…在这里找到了数字作为文本问题的修复方法。。。如果需要其他格式,您可以不使用merge_all_to_a_book,而是使用pyexcel.Sheet,您可以先使用format()函数将其合并,然后使用将其另存为csv.with pyexcel cli包和pyexcel、pyexcel xlsx,您可以在命令行中执行此操作:
    $pyexcel合并您的\u csv\u目录/*.csv out.xlsx
    非常好的一个chfw!我非常喜欢它!!取决于pandasNote中的openpyxl:这取决于您的CSV文件是否为平面文件格式。
      import pandas as pd
    
      read_file = pd.read_csv ('File name.csv')
      read_file.to_excel ('File name.xlsx', index = None, header=True)
    
    import pyexcel
    
    sheet = pyexcel.get_sheet(file_name="myFile.csv", delimiter=",")
    sheet.save_as("myFile.xlsx")