Текстовый файл (.txt) — самый «свободный» формат: у него нет схемы, грамматики и стандарта. Что внутри — целиком решает тот, кто файл создал. Это может быть простой список, экспорт данных с фиксированной шириной колонок, выгрузка с нестандартным разделителем или вообще сплошной текст. Поэтому парсинг TXT — это не про библиотеку под формат, а про умение разобрать произвольную структуру вручную. Статья входит в наш обзор парсинга документов.
Сначала определите, что внутри
Прежде чем писать код, нужно понять характер файла. Если это строки одного вида (по записи на строку) — достаточно построчного чтения и разбора каждой строки. Если значения разделены постоянным символом — табуляцией, точкой с запятой, вертикальной чертой — то перед вами, по сути, CSV с нестандартным разделителем, и правильнее воспользоваться CSV-ридером, который корректно обработает кавычки. Если же это сплошной текст без явной структуры, в ход идут регулярные выражения, которыми вы вытаскиваете нужные фрагменты по шаблону.
Отдельно стоит проверить кодировку (русский текст часто бывает в windows-1251) и символ перевода строки — в файлах из Windows это \r\n, в Unix \n. Большинство языков читают строки корректно в обоих случаях, но «хвостовой» \r иногда приходится убирать вручную.
Построчное чтение
Python
Файл — это итератор по строкам, поэтому читать его построчно естественно и экономно по памяти даже для гигабайтных файлов.
with open("data.txt", encoding="utf-8") as f:
for line in f:
line = line.strip() # убираем пробелы и перевод строки
if not line: # пропускаем пустые строки
continue
print(line)
JavaScript / Node.js
Чтобы не загружать большой файл целиком, в Node читают его потоком построчно через модуль readline.
const fs = require("fs");
const readline = require("readline");
const rl = readline.createInterface({
input: fs.createReadStream("data.txt", "utf-8"),
});
rl.on("line", (line) => {
const clean = line.trim();
if (clean) console.log(clean);
});
Go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
f, _ := os.Open("data.txt")
defer f.Close()
sc := bufio.NewScanner(f)
for sc.Scan() {
line := strings.TrimSpace(sc.Text())
if line != "" {
fmt.Println(line)
}
}
}
Извлечение данных регулярными выражениями
Когда нужные значения «зашиты» в текст, их достают по шаблону. Допустим, в файле строки вида [2026-06-01] Заказ #1042: 3490 руб. и нужно вытащить дату, номер заказа и сумму.
import re
pattern = re.compile(r"\[(\d{4}-\d{2}-\d{2})\] Заказ #(\d+): (\d+) руб")
with open("orders.txt", encoding="utf-8") as f:
for line in f:
m = pattern.search(line)
if m:
date, order_id, amount = m.groups()
print(date, order_id, amount)
Тот же подход на JavaScript:
const re = /\[(\d{4}-\d{2}-\d{2})\] Заказ #(\d+): (\d+) руб/;
const m = line.match(re);
if (m) {
const [, date, orderId, amount] = m;
console.log(date, orderId, amount);
}
Регулярные выражения — главный инструмент при разборе неструктурированного текста, и стоит держать под рукой какой-нибудь интерактивный тестер (например, regex101), чтобы отлаживать шаблон на реальных строках. Важно помнить про их границы: регулярками не разбирают вложенные форматы вроде XML или HTML — там нужны полноценные парсеры. А вот для плоского текста по строкам это идеальный выбор.
Данные с фиксированной шириной колонок
Старые системы и выгрузки из мейнфреймов часто отдают текст, где колонки заданы не разделителем, а позицией символов: первые 10 символов — артикул, следующие 30 — название, и так далее. Такой формат разбирают срезами строки по фиксированным индексам.
with open("fixed.txt", encoding="utf-8") as f:
for line in f:
sku = line[0:10].strip()
name = line[10:40].strip()
price = line[40:50].strip()
print(sku, name, price)
Частный, но очень важный случай — логи
Самый распространённый вид TXT-файлов, который приходится разбирать на практике, — это журналы серверов и приложений. У логов хоть и нет общего стандарта, но в пределах одного источника формат строки стабилен, что позволяет применять к ним те же приёмы — построчное чтение плюс регулярные выражения — но с рядом своих нюансов: многострочные записи, ротация, объёмы в гигабайты. Этому посвящена отдельная статья про парсинг логов.
Если у вас регулярно приходят текстовые выгрузки с нестандартной или «плавающей» структурой и их нужно превращать в чистые таблицы — мы настроим парсинг под ваш формат и выгрузим результат в CSV, Excel или прямо в базу.