четверг, 17 июня 2010 г.

Как конвертировать xls в csv?

xls2csv и xls2tsv в одном флаконе ;)


Вот простая функция, которая конвертирует файл Excel в CSV:

def xls2csv(xls_file,csv_file,input_encoding,output_encoding,separator):
  data=[]
  for sheet_name, values in parse_xls(xls_file, input_encoding): # parse_xls(arg) -- default encoding
       matrix = [[]]
       for row_idx, col_idx in sorted(values.keys()):
    v = values[(row_idx, col_idx)]
    if isinstance(v, unicode):
        v = v.encode(output_encoding, 'backslashreplace')
    else:
        v = str(v)
    last_row, last_col = len(matrix), len(matrix[-1])
    while last_row < row_idx:
        matrix.extend([[]])
        last_row = len(matrix)

    while last_col < col_idx:
        matrix[-1].extend([''])
        last_col = len(matrix[-1])

    matrix[-1].extend([v])

       for row in matrix:
    csv_row = separator.join(row)
    #print csv_row
    data.append(csv_row+'\n')
  outfile = open(tsv_file, 'w')
  for i in data:
    outfile.write(i)
    #print tsv_file
    #print 'i=',i
    #print
  outfile.close()

Для использования этой функции нужно задать в качестве параметров xls_file и сsv_file соответственно путь к исходному и новому файлам, input_encoding output_encoding - кодировка этих файлов (например 'cp1251' и 'utf-8'), separator - разделитель данных в получаемом csv, например запятая: ',' или знак табуляции '\t' (в этом случае, вообще говоря, это будет уже не csv, а tsv файл). Здесь используется библиотека pyExcelerator. В Ubuntu ee можно установить следующим образом: sudo apt-get install python-excelerator

Альтернативные варианты

Теоретически для преобразования xls в csv можно также использовать библиотеки xlrd и xlwrt.
Также в Ubuntu можно использовать программу xls2csv из пакета catdoc, но к сожалению xls2csv из catdoc не умеет использовать табулятор в качестве разделителя и к тому же она не очень хорошо отлажена и иногда дает сбои.

Комментариев нет:

Отправить комментарий