File: _utils.py

package info (click to toggle)
python-clevercsv 0.7.5%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 872 kB
  • sloc: python: 5,076; ansic: 763; makefile: 81
file content (44 lines) | stat: -rw-r--r-- 1,264 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding: utf-8 -*-

from clevercsv import __version__


def parse_int(val, name):
    """Parse a number to an integer if possible"""
    if val is None:
        return val
    try:
        return int(val)
    except ValueError:
        raise ValueError(
            f"Please provide a number for {name}, instead of {val}"
        )


def generate_code(filename, dialect, encoding, use_pandas=False):
    d = '"\\t"' if dialect.delimiter == "\t" else f'"{dialect.delimiter}"'
    q = '"%s"' % (dialect.quotechar.replace('"', '\\"'))
    e = repr(f"{dialect.escapechar}").replace("'", '"')
    base = [
        "",
        f"# Code generated with CleverCSV version {__version__}",
        "",
        "import clevercsv",
    ]
    if use_pandas:
        return base + [
            "",
            f'df = clevercsv.read_dataframe("{filename}", delimiter={d}, quotechar={q}, escapechar={e})',
            "",
        ]

    enc = "None" if encoding is None else f'"{encoding}"'
    lines = base + [
        "",
        f'with open("{filename}", "r", newline="", encoding={enc}) as fp:',
        "    reader = clevercsv.reader(fp, "
        + f"delimiter={d}, quotechar={q}, escapechar={e})",
        "    rows = list(reader)",
        "",
    ]
    return lines