3. Уявлення табличних даних в форматі CSV. Читання-запис файлу CSV за допомогою словника. Створення власного діалекту. Сніффер, розпізнавання діалекту.

CSV — табличні дані

Запис даних у CSV файл.

import csv

data = [
    {'Name': 'Anna', 'Age': 25},
    {'Name': 'Oleh', 'Age': 30},
]

with open('people.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['Name', 'Age'])
    writer.writeheader()
    writer.writerows(data)

Читання з файлу.

with open('people.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['Name'], row['Age'])

Створення власного діалекту CSV

Діалекти CSV (CSV dialects) — це набір налаштувань, які визначають формат CSV-файлу: якими символами розділяються поля, як обрамляються рядки в лапки, які символи екрануються тощо.

Бібліотека csv у Python дозволяє визначати власні діалекти або використовувати вбудовані для роботи з CSV-файлами, які мають різні стилі.

Параметр Опис
delimiter Символ, що розділяє стовпці (наприклад, , або ;)
quotechar Символ, що обрамляє текстові значення (зазвичай ")
escapechar Символ для екранування спецсимволів
lineterminator Символ наприкінці рядка (наприклад, \n)
quoting Як обробляти лапки (наприклад, csv.QUOTE_ALLcsv.QUOTE_MINIMAL)
skipinitialspace Пропуск пробілу після роздільника

Приклад коду
Для використання діалекту, його потрібно зареєструвати:

csv.register_dialect('my_dialect',
                     delimiter=';', 
                     quotechar='"', 
                     quoting=csv.QUOTE_MINIMAL)

Потім діалект можна використовувати під час читання файлу.

with open('custom.csv', 'w', newline='') as f:
    writer = csv.writer(f, dialect='my_dialect')
    writer.writerow(['Name', 'Age'])
    writer.writerow(['Ivan', 28])

Sniffer

Сніффер (Sniffer) у контексті роботи з CSV у Python — це спеціальний клас csv.Sniffer, який автоматично визначає формат CSV-файлу, тобто його діалект.

Іноді ми не знаємо наперед: який роздільник використано (,;\t, інше), чи є заголовки в першому рядку, як обрамлено текстові поля. Сніффер може переглянути файл і автоматично визначити діалект.

Приклад коду:

import csv

with open('data.csv', 'r') as f:
    sample = f.read(1024)       # зчитуємо зразок
    f.seek(0)                   # повертаємось на початок файлу

    sniffer = csv.Sniffer()
    dialect = sniffer.sniff(sample)
    has_header = sniffer.has_header(sample)

    print("Діалект:", dialect.delimiter)
    print("Є заголовок?", has_header)

    reader = csv.reader(f, dialect)
    for row in reader:
        print(row)

Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання