Shofel2_T124_python/venv/lib/python3.10/site-packages/unicodecsv/py3.py

96 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
import csv
from csv import *
class _UnicodeWriteWrapper(object):
"""Simple write() wrapper that converts unicode to bytes."""
def __init__(self, binary, encoding, errors):
self.binary = binary
self.encoding = encoding
self.errors = errors
def write(self, string):
return self.binary.write(string.encode(self.encoding, self.errors))
class UnicodeWriter(object):
def __init__(self, f, dialect=csv.excel, encoding='utf-8', errors='strict',
*args, **kwds):
if f is None:
raise TypeError
f = _UnicodeWriteWrapper(f, encoding=encoding, errors=errors)
self.writer = csv.writer(f, dialect, *args, **kwds)
def writerow(self, row):
return self.writer.writerow(row)
def writerows(self, rows):
return self.writer.writerows(rows)
@property
def dialect(self):
return self.writer.dialect
class UnicodeReader(object):
def __init__(self, f, dialect=None, encoding='utf-8', errors='strict',
**kwds):
format_params = ['delimiter', 'doublequote', 'escapechar',
'lineterminator', 'quotechar', 'quoting',
'skipinitialspace']
if dialect is None:
if not any([kwd_name in format_params
for kwd_name in kwds.keys()]):
dialect = csv.excel
f = (bs.decode(encoding, errors=errors) for bs in f)
self.reader = csv.reader(f, dialect, **kwds)
def __next__(self):
return self.reader.__next__()
def __iter__(self):
return self
@property
def dialect(self):
return self.reader.dialect
@property
def line_num(self):
return self.reader.line_num
writer = UnicodeWriter
reader = UnicodeReader
class DictWriter(csv.DictWriter):
def __init__(self, csvfile, fieldnames, restval='',
extrasaction='raise', dialect='excel', encoding='utf-8',
errors='strict', *args, **kwds):
super().__init__(csvfile, fieldnames, restval,
extrasaction, dialect, *args, **kwds)
self.writer = UnicodeWriter(csvfile, dialect, encoding=encoding,
errors=errors, *args, **kwds)
self.encoding_errors = errors
def writeheader(self):
header = dict(zip(self.fieldnames, self.fieldnames))
self.writerow(header)
class DictReader(csv.DictReader):
def __init__(self, csvfile, fieldnames=None, restkey=None, restval=None,
dialect='excel', encoding='utf-8', errors='strict', *args,
**kwds):
csv.DictReader.__init__(self, csvfile, fieldnames, restkey, restval,
dialect, *args, **kwds)
self.reader = UnicodeReader(csvfile, dialect, encoding=encoding,
errors=errors, *args, **kwds)