【问题标题】:Convert large CSV file to excel using Python 3使用 Python 3 将大型 CSV 文件转换为 excel
【发布时间】:2017-11-16 13:16:54
【问题描述】:

这是我将 CSV 文件隐蔽到 .xlsx 文件的代码,对于小尺寸 CSV 文件,此代码工作正常,但当我尝试处理大尺寸 CSV 文件时,它显示错误。

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

for csvfile in glob.glob(os.path.join('.', 'file.csv')):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'r', 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()

错误是

File "CsvToExcel.py", line 12, in <module>
for r, row in enumerate(reader):
_csv.Error: field larger than field limit (131072)
Exception ignored in: <bound method Workbook.__del__ of 
<xlsxwriter.workbook.Workbook object at 0x7fff4e731470>>
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/xlsxwriter/workbook.py", line 
153, in __del__
Exception: Exception caught in workbook destructor. Explicit close() may be 
required for workbook.

【问题讨论】:

  • 您是否尝试将csv文件直接导入Excel?
  • 是的,我正在尝试将本地 csv 文件直接转换为 excel 文件
  • 当你导入它直接形成Excel应用程序时它是否正确导入?
  • 我找到了带有熊猫包的新代码,我的新代码现在运行良好 import pandas data = pandas.read_csv('Documents_2/AdvMedcsv.csv') data = data.groupby(lambda x: data ['research_id'][x]).first() writer = pandas.ExcelWriter('Documents_2/AdvMed.xlsx',engine='xlsxwriter') data.to_excel(writer) writer.save()

标签: python excel python-3.x csv xlsxwriter


【解决方案1】:

在使用大文件时,最好使用“constant_memory”来控制内存使用,例如:

workbook = Workbook(csvfile + '.xlsx', {'constant_memory': True}).

参考:xlsxwriter.readthedocs.org/en/latest/working_with_memory.htm‌​l

【讨论】:

  • _csv.Error: 字段大于字段限制 (131072)
  • Excel 被限制在超过 100 万行(准确地说是 2^20),显然您正在尝试加载更多。我认为您所说的拆分技术是 Excel 的内置技术,但恐怕它只适用于宽度问题,不适用于长度问题。我马上看到的最简单的方法是使用一些文件拆分工具 - 有大量的 'em 并使用它将生成的部分 csv 文件加载到多个工作表中。
  • 有没有其他方法可以将大型 CSV 文件转换为 excel 仅抛出 python 代码。?
  • 你知道限制为什么不把它转换成数据块,我相信它不会失败
  • 我找到了带有熊猫包的新代码,我的新代码现在运行良好 import pandas data = pandas.read_csv('Documents_2/AdvMedcsv.csv') data = data.groupby(lambda x: data ['research_id'][x]).first() writer = pandas.ExcelWriter('Documents_2/AdvMed.xlsx',engine='xlsxwriter') data.to_excel(writer) writer.save()
【解决方案2】:

我发现了带有熊猫包的新代码,这个代码现在可以正常工作了

import pandas
data = pandas.read_csv('Documents_2/AdvMedcsv.csv') 
data = data.groupby(lambda x: data['research_id'][x]).first() 
writer = pandas.ExcelWriter('Documents_2/AdvMed.xlsx',engine='xlsxwriter')data.to_excel(writer) 
writer.save()

【讨论】:

  • 不知道为什么我收到此代码的语法错误(python 3.7)。有什么建议吗?
猜你喜欢
  • 2023-01-21
  • 2018-07-14
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2017-09-13
相关资源
最近更新 更多