TSV в CSV: конвертируйте онлайн за секунды
- TSV и CSV отличаются только разделителем: табуляция против запятой, но это критично при импорте в Excel или базы данных.
- Стандартные утилиты вроде `sed` и `awk` справляются с простыми TSV за секунды, но дают сбой при кавычках и экранировании.
- Онлайн-конвертер TSV в CSV корректно обрабатывает 100% edge-cases: пустые поля, кавычки внутри значений и многострочные записи.
- В 2026 году в Excel 2021 по-прежнему важно явно указывать разделитель при импорте, иначе он может неправильно распарсить CSV.
- Что такое TSV и CSV и почему их нужно различать
- Конвертация одной командой: sed и awk
- Конвертация с помощью Python: универсальный способ
- Онлайн-конвертер TSV в CSV: когда нет доступа к скриптам
- Таблица сравнения инструментов конвертации
- Подводные камни и частые ошибки
- Как проверить корректность конвертации
- Как отладить конвертацию: пример с цифрами шаг за шагом
- Частные случаи: TSV с заголовками, пустые строки, NULL-значения
Что такое TSV и CSV и почему их нужно различать
TSV (Tab-Separated Values) и CSV (Comma-Separated Values) — текстовые форматы для хранения табличных данных. Разница только в разделителе: в TSV это табуляция (\t), в CSV — запятая (,). Однако эта разница создаёт проблемы при импорте в электронные таблицы и базы данных. Например, Excel ожидает CSV с запятыми, а многие скрипты генерируют TSV как экспорт из баз. Поэтому конвертация — частая задача.
Правила экранирования общие для обоих форматов: если значение содержит разделитель или кавычку, оно заключается в двойные кавычки, а имеющиеся кавычки дублируются. В TSV экранировать табуляцию нужно реже — она редко встречается в данных, в отличие от запятых. Это делает TSV чуть более простым для ручного чтения, но менее совместимым.
Конвертация одной командой: sed и awk
Самый быстрый способ для простых TSV-файлов — командная строка. Используйте sed для замены табуляции на запятую. Важно: этот метод не обрабатывает кавычки и многострочные поля — только если в данных нет запятых или кавычек.
sed 's/\t/,/g' input.tsv > output.csvБолее надёжный — awk, который учитывает кавычки:
awk 'BEGIN { FS="\t"; OFS="," } { for(i=1;i<=NF;i++) { if($i ~ /[",\t\n]/) $i="\"" $i "\""; } print }' input.tsv > output.csvЭтот скрипт добавляет кавычки вокруг полей, содержащих запятую, табуляцию или новую строку. Но он всё ещё не идеален для вложенных кавычек.
Для Windows (PowerShell) есть Import-Csv с параметром -Delimiter "`t":
Import-Csv input.tsv -Delimiter "`t" | Export-Csv output.csv -NoTypeInformationКонвертация с помощью Python: универсальный способ
Если нужна стопроцентная корректность, используйте встроенные модули Python — csv и io. Этот код читает TSV с корректной обработкой кавычек, экранирования и пустых строк:
import csv
import io
tsv_data = open('input.tsv', 'r', newline='', encoding='utf-8').read()
reader = csv.reader(io.StringIO(tsv_data), delimiter='\t')
csv_output = io.StringIO()
writer = csv.writer(csv_output, quoting=csv.QUOTE_MINIMAL)
for row in reader:
writer.writerow(row)
open('output.csv', 'w', newline='', encoding='utf-8').write(csv_output.getvalue())Разбор: csv.reader с delimiter='\t' разбирает TSV, автоматически обрабатывая кавычки. csv.writer с quoting=csv.QUOTE_MINIMAL добавляет кавычки только там, где нужно (если поле содержит разделитель, кавычку или перевод строки). Итоговый CSV будет строго стандартным.
Для больших файлов (гигабайты) обрабатывайте построчно без загрузки всего в память:
with open('input.tsv', 'r', newline='', encoding='utf-8') as fin, \
open('output.csv', 'w', newline='', encoding='utf-8') as fout:
reader = csv.reader(fin, delimiter='\t')
writer = csv.writer(fout, quoting=csv.QUOTE_MINIMAL)
for row in reader:
writer.writerow(row)Онлайн-конвертер TSV в CSV: когда нет доступа к скриптам
Если вы не разработчик или просто не хотите писать код, используйте TSV в CSV — проверенный онлайн-конвертер на русском языке. Он работает прямо в браузере, без отправки данных на сервер (всё обрабатывается на вашем устройстве), что гарантирует приватность.
Как пользоваться:
- Загрузите TSV-файл или вставьте текст.
- Выберите настройки: кавычки, кодировку, обработку пустых строк.
- Скачайте результат или скопируйте в буфер.
Конвертер корректно обрабатывает все edge-cases: значения с кавычками, многострочные ячейки, разную кодировку. В отличие от Excel, который при открытии TSV может неправильно распарсить данные из-за региональных настроек (в России десятичный разделитель — запятая, а разделитель списка — точка с запятой), онлайн-инструмент даёт чистый CSV, готовый к импорту.
- 1Оценить сложность данных
Проверьте, есть ли в файле кавычки, запятые, многострочные поля.
- 2Выбрать инструмент
Для простых — sed/awk, для сложных — Python или онлайн-конвертер.
- 3Запустить конвертацию
Выполните команду или загрузите файл в конвертер.
- 4Проверить визуально
Откройте CSV в текстовом редакторе, убедитесь в целостности строк.
- 5Импортировать в целевую систему
Используйте Data Import с явным указанием разделителя — запятой.
Таблица сравнения инструментов конвертации
| Инструмент | Скорость | Обработка кавычек | Подходит для |
|---|---|---|---|
| sed | Мгновенно | Нет | Простые файлы без запятых/кавычек |
| awk | Быстро | Частично | Большие файлы с простыми данными |
| Python csv | Средне | Да (стандарт RFC 4180) | Любые файлы, критична корректность |
| Онлайн-конвертер | Быстро | Да | Разовые задачи, нет доступа к коду |
✅ Чек-лист для безошибочной конвертации
0 из 8
Подводные камни и частые ошибки
Самые частые проблемы: потеря кавычек, поломка многострочных полей и неверная кодировка.
Основные грабли:
- Экранирование кавычек. В TSV кавычки внутри поля экранируются двойными кавычками. Если просто заменить табуляцию на запятую, кавычки сломаются. Всегда используйте инструмент, понимающий кавычки.
- Многострочные поля. Значение может содержать перевод строки. Простая замена разобьёт запись. Только парсер с учётом кавычек (Python, онлайн-конвертер) это выдержит.
- Кодировка. TSV часто бывает в UTF-8, но Excel в Windows по умолчанию ожидает ANSI (Windows-1251). Если открыть такой CSV в Excel, кириллица станет кракозябрами. Решение: сохраняйте CSV с BOM (Byte Order Mark) или конвертируйте в ANSI.
- Разделитель в Excel. В русской версии Excel разделитель списка — «;» (точка с запятой), а не запятая. Поэтому CSV с запятыми может не открываться. Используйте
csv.writerсdelimiter=';'или настройте Excel.
Как проверить корректность конвертации
После конвертации обязательно проверьте результат. Вот простой алгоритм:
- Откройте CSV в текстовом редакторе (Notepad++, VS Code) — убедитесь, что строки не разбиты, кавычки расставлены симметрично.
- Импортируйте CSV в Excel через меню «Данные» → «Из текстового/CSV-файла», выбрав разделитель «запятая» и кодировку UTF-8. Проверьте, что все колонки совпадают с исходным TSV.
- Посчитайте количество строк:
wc -l output.csv(Linux/Mac) илиGet-Content output.csv | Measure-Object(PowerShell). Оно должно быть равно числу строк в TSV минус заголовок, если он был. - Для автоматизированной проверки используйте diff после сортировки:
diff <(sort input.tsv) <(sort output.csv)— но только если данные простые.
Если после конвертации данные отображаются криво — вернитесь к инструменту с полной обработкой кавычек.
Как отладить конвертацию: пример с цифрами шаг за шагом
Допустим, у вас TSV-файл с данными о продажах:
Имя\tГород\tСумма\tПримечание
Иван\tМосква\t\"1 500\"\t\"Товар \"\"A\"\"\"
Мария\t\"Санкт-Петербург\"\t2 000\tШаг 1: визуально оцениваем — есть кавычки и запятые в числах. Простая замена sed 's/\t/,/g' даст:
Иван,Москва,"1 500","Товар ""A"""
Мария,"Санкт-Петербург",2 000,Шаг 2: это валидный CSV? Да, но поле Товар ""A""" — это значение Товар "A" (с двойной кавычкой внутри). Excel распознает правильно. Однако заметим, что в строке Марии после последней запятой ничего нет — это пустое поле, корректно.
Шаг 3: если бы использовали awk без кавычек, поле Санкт-Петербург было бы разбито запятой, что неверно. Python же сохранит всё как надо.
Теперь сравните с исходным: количество полей совпало, кавычки корректны. Конвертация успешна.
Частные случаи: TSV с заголовками, пустые строки, NULL-значения
Заголовки: если первая строка — заголовок, обычные методы её не трогают. Убедитесь, что конвертер не удаляет её.
Пустые строки: некоторые файлы содержат пустые строки (например, после экспорта). Они должны превратиться в пустые строки в CSV. Python-код выше пропускает их? Нет, csv.reader выдаёт по одной строке, пустая строка — это список с одним пустым полем? Нет, если строка пуста, reader вернёт пустой список, который writer запишет как пустую строку. Хорошо.
NULL-значения: в TSV часто пишут \N или NULL. Они останутся как текст. Если нужно заменить на пустоту, добавьте проверку в Python.
Пробелы в значениях: иногда TSV содержит пробелы вокруг табуляции (например, для читаемости). Перед конвертацией желательно их тримить. Python: strip() для каждого поля.
Очень большие файлы: если файл больше 1 ГБ, онлайн-конвертер может зависнуть. Используйте Python с построчной обработкой.
🧮 Посчитайте сами — инструменты по теме
🧭 Разделы по теме
Частые вопросы
Чем отличается TSV от CSV?
В TSV разделитель — табуляция, в CSV — запятая. В остальном правила одинаковы: кавычки для значений, содержащих разделитель, дублирование кавычек.
Можно ли открыть TSV в Excel?
Да, Excel открывает TSV, но часто путает разделители из-за региональных настроек. Лучше сначала конвертировать в CSV, а потом импортировать через Data → From Text/CSV.
Какой инструмент лучше всего подходит для конвертации TSV в CSV?
Для одноразовой задачи — онлайн-конвертер TSV в CSV. Для автоматизации — Python с модулем csv. Для быстрых простых файлов — sed или awk.
Почему после конвертации у меня сломались кавычки?
Вы использовали простую замену табуляции на запятую без учёта экранирования. Используйте инструмент, который понимает формат CSV (Python csv writer, онлайн-конвертер).
Как конвертировать TSV в CSV в Python?
Используйте модуль csv: csv.reader с delimiter='\t' для чтения и csv.writer с quoting=csv.QUOTE_MINIMAL для записи. Код из статьи даёт рабочий пример.
Что делать, если TSV содержит многострочные поля?
Многострочные поля экранируются кавычками. Только парсер, учитывающий кавычки (Python, онлайн-конвертер), обработает их правильно. Простая замена сломает строки.
Как сохранить русские буквы в CSV?
Используйте кодировку UTF-8. Для Excel Windows добавьте BOM (byte order mark) в начало файла. В Python: encoding='utf-8-sig' при записи.
Можно ли конвертировать CSV обратно в TSV?
Да, те же инструменты с обратными разделителями: csv.reader с delimiter=',' и csv.writer с delimiter='\t'. Или онлайн-конвертер с выбором разделителя.
Источники и нормативные документы
- RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
- Python csv module documentation
- Microsoft Excel import CSV documentation