Все статьи
Форматы данных

CSV vs TSV: разница и конвертация

Форматы с разделителями: запятая vs табуляция, когда использовать каждый, конвертация между ними.

10 февраля 2025
5 мин чтения
ConvertHub
#csv#tsv#разделители

Введение

Когда речь заходит о табличных данных, первое, что приходит в голову — CSV. Однако существует и другой популярный формат — TSV, в котором разделителем выступает символ табуляции. На первый взгляд разница минимальна, но на практике выбор формата влияет на совместимость с инструментами, обработку спецсимволов и удобство работы. В этой статье разберём, чем отличаются CSV и TSV, когда уместнее каждый из них и как конвертировать между ними.

Что такое CSV

CSV (Comma-Separated Values) — текстовый формат, где значения разделяются запятыми. Стандарт описан в RFC 4180, но на практике существует множество диалектов: в европейских локалях часто используют точку с запятой, поскольку запятая там служит десятичным разделителем. Пример CSV с запятыми:

id,name,email
1,Анна Иванова,anna@example.com
2,Борис Петров,boris@example.com

CSV поддерживает кавычки для полей, содержащих разделитель или перенос строки. Это позволяет корректно обрабатывать сложные данные, но усложняет парсеры.

Что такое TSV

TSV (Tab-Separated Values) — текстовый формат, где разделителем выступает символ табуляции (\t). Табуляция редко встречается в реальных данных, поэтому TSV не требует экранирования в большинстве случаев. Формат стандартизирован для обмена данными с электронными таблицами и широко применяется в биоинформатике, логировании и базах данных.

id	name	email
1	Анна Иванова	anna@example.com
2	Борис Петров	boris@example.com

TSV проще парсить: достаточно разбить строку по табуляции, без обработки кавычек. Но в данных не должно быть символа табуляции, иначе структура сломается.

Сравнение форматов

ХарактеристикаCSVTSV
РазделительЗапятая (или ;)Табуляция
СтандартRFC 4180IANA TSV
ЭкранированиеКавычки + удвоениеНе требуется (обычно)
Риск конфликтаВысокий (запятая часта в данных)Низкий (табуляция редка)
Поддержка ExcelДа, с локальными нюансамиДа, через импорт
Визуальная читаемостьСредняя (запятая сливается)Высокая (колонки ровные)
РаспространённостьОчень высокаяСредняя

Когда выбирать CSV

  • Обмен с широким кругом систем — почти любой софт понимает CSV.
  • Экспорт из Excel и Google Sheets — оба по умолчанию предлагают CSV.
  • Веб-формы и API — стандартный формат для выгрузки табличных данных.
  • Аналитика и BI — Tableau, Power BI, Apache Superset хорошо работают с CSV.
  • Конфигурации и небольшие таблицы — где критична максимальная совместимость.

Когда выбирать TSV

  • Биоинформатика — геномные данные, BLAST-результаты используют TSV как стандарт.
  • Логи и stream-обработка — табуляция реже встречается в текстовых полях, что упрощает парсинг.
  • Взаимодействие с Unix-утилитамиcut -f,paste, join работают с TSV по умолчанию.
  • Большие объёмы данных — TSV обычно компактнее за счёт отсутствия кавычек и проще парсится потоково.
  • Внутренние форматы баз данных — MySQL, PostgreSQL при экспорте через COPY часто используют TSV.

Конвертация CSV в TSV

На первый взгляд конвертация тривиальна: заменяем все запятые на табуляции. Но это работает только для простых CSV без кавычек. Если в полях встречаются запятые внутри кавычек, простая замена сломает структуру. Правильный алгоритм:

  1. Распарсить CSV с учётом кавычек и экранирования.
  2. Извлечь поля как массив значений.
  3. Проверить, что ни одно поле не содержит табуляции (или заменить её на пробел).
  4. Объединить поля через табуляцию в строку.
  5. Записать результат в TSV-файл.

Для программной конвертации в Python используйте стандартный модуль csv:

import csv

with open('data.csv', encoding='utf-8') as fin, \
     open('data.tsv', 'w', encoding='utf-8', newline='') as fout:
    reader = csv.reader(fin)
    writer = csv.writer(fout, dialect='excel-tab')
    for row in reader:
        # Заменяем табуляции в значениях на пробелы
        clean = [v.replace('\t', ' ') for v in row]
        writer.writerow(clean)

В JavaScript удобнее всего использовать библиотеку papaparse для чтения CSV и писать TSV вручную через row.join('\\t').

Конвертация TSV в CSV

Обратная задача проще: TSV почти никогда не требует экранирования, поэтому достаточно прочитать поля и записать через csv.writer, который автоматически добавит кавычки там, где это нужно:

import csv

with open('data.tsv', encoding='utf-8') as fin, \
     open('data.csv', 'w', encoding='utf-8', newline='') as fout:
    reader = csv.reader(fin, dialect='excel-tab')
    writer = csv.writer(fout)
    for row in reader:
        writer.writerow(row)

Здесь csv.writer сам решит, какие поля взять в кавычки. Это самый надёжный способ конвертации.

Онлайн-конвертер

Для разовых задач используйте наши инструменты: CSV в TSV и TSV в CSV. Они корректно обрабатывают кавычки, кодировки и спецсимволы, работают локально в браузере.

Подводные камни

Локальные разделители

В России и большинстве стран Европы десятичный разделитель — запятая, поэтому Excel в этих локалях использует точку с запятой в CSV. Если вы открываете CSV из европейской локали в американской, данные могут слиться. TSV таких проблем не имеет.

Символ табуляции в данных

Если в исходных данных случайно попала табуляция (например, при копировании из браузера), конвертация CSV в TSV сломает структуру. Перед конвертацией проверяйте данные на наличие табуляций и заменяйте их.

Кодировка

CSV из Excel на Windows часто сохраняется в Windows-1251, а не UTF-8. TSV тоже может быть в любой кодировке. При конвертации между форматами явно указывайте кодировку чтения и записи, желательно UTF-8.

BOM (Byte Order Mark)

Файлы UTF-8 из Windows часто начинаются с BOM — трёх байтов EF BB BF. Это помогает Excel правильно определить кодировку, но мешает другим парсерам (первые поля могут получить лишний префикс). Решение — удалять BOM при чтении или добавлять при записи для совместимости с Excel.

Переносы строк

Windows использует \r\n, Unix — \n. CSV теоретически должен использовать \r\n по RFC 4180, но на практике встречаются оба варианта. При конвертации между платформами следите за переносами, особенно если поля содержат многострочный текст.

Производительность

TSV обычно компактнее CSV: нет кавычек, разделитель один байт. Для больших файлов это даёт экономию в 5–15%. Парсеры TSV проще и быстрее — нет логики обработки кавычек. В stream-обработке логов на высокой скорости это заметно.

Однако выигрыш не радикальный: gzip-сжатие снижает разницу до 1–3%. Поэтому для архивного хранения и передачи лучше использовать сжатые форматы (Parquet, ORC), а CSV/TSV — для обмена и просмотра.

Лучшие практики

  • Сохраняйте файлы в UTF-8 без BOM — это универсальный выбор.
  • Для CSV всегда используйте запятую как разделитель, если нет веских причин выбрать иной.
  • Заключайте в кавычки все поля, содержащие разделитель, кавычку или перенос строки.
  • Перед конвертацией проверяйте данные на наличие конфликтующих символов.
  • Документируйте диалект (разделитель, кавычки, кодировка) в README.
  • Для больших данных предпочитайте TSV: он проще и быстрее парсится.
  • Регулярно тестируйте конвертацию на реальных данных — особенно при работе с международными командами.

Связанные инструменты и форматы

Если данные предназначены для веб-приложений или API, удобнее конвертировать их в JSON — см. статью «CSV в JSON». Для импорта в базу данных есть CSV в SQL INSERT. А если нужно вытащить данные из HTML-таблицы, поможет инструментHTML таблицы в CSV.

Заключение

CSV vs TSV — не вопрос «что лучше», а вопрос «что уместнее в данной ситуации». CSV универсален и совместим со всем, но требует аккуратной обработки кавычек. TSV проще парсится и компактнее, но реже поддерживается вне специализированных областей. Если вы обмениваетесь данными с широкой аудиторией — выбирайте CSV. Если работаете в биоинформатике, логировании или Unix-скриптах — TSV удобнее. Для конвертации между форматами используйте наш онлайн-инструмент или библиотеку csv в Python, которая автоматически обрабатывает все тонкости диалектов.

Попробуйте эти инструменты

Похожие статьи