Source code for docplex.util.csv_utils

# --------------------------------------------------------------------------
# Source file provided under Apache License, Version 2.0, January 2004,
# http://www.apache.org/licenses/
# (c) Copyright IBM Corp. 2015, 2020
# --------------------------------------------------------------------------
'''Some csv utilities
'''
import os


[docs]def encode_csv_string(text): """ Encode a string to be used in CSV file Args: text: String to encode Returns: Encoded string, including starting and ending double quote """ res = ['"'] for c in text: res.append(c) if c == '"': res.append('"') res.append('"') return ''.join(res)
def write_csv_line(output, line, encoding): line = ','.join([encode_csv_string('%s' % c) for c in line]) output.write(line.encode(encoding)) output.write('\n'.encode(encoding)) def write_csv(env, table, fields, name): # table must be a named tuple encoding = 'utf-8' with env.get_output_stream(name) as ostr: write_csv_line(ostr, fields, encoding) for line in table: write_csv_line(ostr, line, encoding)
[docs]def write_table_as_csv(env, table, name, field_names): '''Writes a kpis dataframe as file which name is specified. The data type depends of extension of name. This uses the specfied env to write data as attachments ''' _, ext = os.path.splitext(name) ext = ext.lower() if ext == '.csv': encoding = 'utf-8' with env.get_output_stream(name) as ostr: write_csv_line(ostr, field_names, encoding) for line in table: write_csv_line(ostr, line, encoding) else: # right now, only csv is supported raise ValueError('file format not supported for KPIs file: %s' % ext)