openpyxl无法打开超过65k行

时间:2014-02-21 13:48:21

标签: python python-2.7 csv xlsx openpyxl

我有一个xlsx文件,有50​​0,000行。我想将它复制到csv文件中,但我只能复制65k行然后程序结束。我的代码用于从xlsx复制数据文件到csv file.amd它需要花费太多时间来打印65k行。

import openpyxl
import csv
import time
import collections

def csv_from_excel() :
    t1=(time.time())*1000
    workbook = openpyxl.load_workbook(filename = '5lac_xlsx.xlsx',optimized_read = True, use_iterators = True)
    sh=workbook.get_sheet_by_name('Sheet1')
    your_csv_file = open('your_csv_file.csv','wb')
    wr = csv.writer(your_csv_file,quoting=csv.QUOTE_ALL)
    t2=(time.time())*1000
    print (t2-t1)
    fp = open('your_csv_file.csv', 'wb')
    a = csv.writer(fp, delimiter=',')

    m1=(time.time())*1000
    count=0

    for row_t in sh.iter_rows():
        for cell in row_t :
            try :
                count=count+1
                wr.writerow([cell[3]])  
                #wr.writerow('\n')
            except :
                print "error"

    print "count"
    print count

    your_csv_file.close()

    m2=(time.time())*1000
    print (m2-m1)

csv_from_excel()

1 个答案:

答案 0 :(得分:1)

converting json to csv中出现了类似的问题,这是通过以块的形式读取输入文件来解决的。示例代码使用小块大小,而大文件使用块大小0x800000

虽然示例代码是针对JSON的,但您应该能够使用相同的原则将其转换为处理Excel文件,除非使用Excel处理器(如xlrd或其他Python Excel包)。

from json import JSONDecoder
from functools import partial


def json_parse(fileobj, decoder=JSONDecoder(), buffersize=2048):
  buffer = ''
  for chunk in iter(partial(fileobj.read, buffersize), ''):
     buffer += chunk
     while buffer:
         try:
             result, index = decoder.raw_decode(buffer)
             yield result
             buffer = buffer[index:]
         except ValueError:
             # Not enough data to decode, read more
             break

此函数将从buffersize块中的给定文件对象读取块,并使解码器对象解析缓冲区中的整个JSON对象。每个解析的对象都会产生给调用者。

像这样使用:

with open('yourfilename', 'r') as infh:
  for data in json_parse(infh):
    # process object