CSV vs TSV: разница и конвертация
Форматы с разделителями: запятая vs табуляция, когда использовать каждый, конвертация между ними.
Введение
Когда речь заходит о табличных данных, первое, что приходит в голову — CSV. Однако существует и другой популярный формат — TSV, в котором разделителем выступает символ табуляции. На первый взгляд разница минимальна, но на практике выбор формата влияет на совместимость с инструментами, обработку спецсимволов и удобство работы. В этой статье разберём, чем отличаются CSV и TSV, когда уместнее каждый из них и как конвертировать между ними.
Что такое CSV
CSV (Comma-Separated Values) — текстовый формат, где значения разделяются запятыми. Стандарт описан в RFC 4180, но на практике существует множество диалектов: в европейских локалях часто используют точку с запятой, поскольку запятая там служит десятичным разделителем. Пример CSV с запятыми:
id,name,email
1,Анна Иванова,anna@example.com
2,Борис Петров,boris@example.comCSV поддерживает кавычки для полей, содержащих разделитель или перенос строки. Это позволяет корректно обрабатывать сложные данные, но усложняет парсеры.
Что такое TSV
TSV (Tab-Separated Values) — текстовый формат, где разделителем выступает символ табуляции (\t). Табуляция редко встречается в реальных данных, поэтому TSV не требует экранирования в большинстве случаев. Формат стандартизирован для обмена данными с электронными таблицами и широко применяется в биоинформатике, логировании и базах данных.
id name email
1 Анна Иванова anna@example.com
2 Борис Петров boris@example.comTSV проще парсить: достаточно разбить строку по табуляции, без обработки кавычек. Но в данных не должно быть символа табуляции, иначе структура сломается.
Сравнение форматов
| Характеристика | CSV | TSV |
|---|---|---|
| Разделитель | Запятая (или ;) | Табуляция |
| Стандарт | RFC 4180 | IANA 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 без кавычек. Если в полях встречаются запятые внутри кавычек, простая замена сломает структуру. Правильный алгоритм:
- Распарсить CSV с учётом кавычек и экранирования.
- Извлечь поля как массив значений.
- Проверить, что ни одно поле не содержит табуляции (или заменить её на пробел).
- Объединить поля через табуляцию в строку.
- Записать результат в 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, которая автоматически обрабатывает все тонкости диалектов.
Попробуйте эти инструменты
Похожие статьи
JSON vs XML — какое выбрать для проекта
Сравнение JSON и XML: синтаксис, размер, скорость парсинга, читаемость. Когда JSON лучше, а когда XML.
JSON форматтер: зачем нужен и как использовать
Что такое форматирование JSON, отступы и пробелы, валидация, minify vs beautify, лучшие практики.
CSV в JSON: конвертация и когда нужна
Как преобразовать CSV в JSON, структура данных, обработка больших файлов, использование в JavaScript.
YAML — конфигурационный формат: полный гид
Синтаксис YAML, отступы, типы данных, отличие от JSON, использование в Docker, Kubernetes, CI/CD.