Converting xls to csv in Python 3 using xlrd

Spill picture Spill · Mar 27, 2014 · Viewed 12.5k times · Source

I'm using Python 3.3 with xlrd and csv modules to convert an xls file to csv. This is my code:

import xlrd
import csv

def csv_from_excel():

    wb = xlrd.open_workbook('MySpreadsheet.xls')
    sh = wb.sheet_by_name('Sheet1')
    your_csv_file = open('test_output.csv', 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

    for rownum in range(sh.nrows):

        wr.writerow(sh.row_values(rownum))

    your_csv_file.close()

With that I am receiving this error: TypeError: 'str' does not support the buffer interface

I tried changing the encoding and replaced the line within the loop with this:

wr.writerow(bytes(sh.row_values(rownum),'UTF-8'))

But I get this error: TypeError: encoding or errors without a string argument

Anyone know what may be going wrong?

Answer

Levon picture Levon · Aug 8, 2016

Try this

import xlrd
import csv

def csv_from_excel():
    wb = xlrd.open_workbook('MySpreadsheet.xlsx')
    sh = wb.sheet_by_name('Sheet1')
    your_csv_file = open('output.csv', 'w', encoding='utf8')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

    for rownum in range(sh.nrows):
        wr.writerow(sh.row_values(rownum))

    your_csv_file.close()