Справочник · Код и сборка
Python в одну строку: полезные приёмы для терминала
Встроенные модули, которые запускаются через python3 -m, и короткие команды для JSON, CSV, дат, хешей и обработки текста прямо в конвейере.
Python есть почти на любой Linux-машине и на macOS, а в стандартной библиотеке лежит много готового. Когда awk уже неудобен, а писать отдельный скрипт лень, хватает одной строки. Все примеры работают на Python 3.8 и новее без установки пакетов.
Модули, которые запускаются через -m
| Команда | Что делает |
|---|---|
python3 -m http.server 8000 | раздаёт текущую папку по HTTP на порту 8000 |
python3 -m http.server -b 127.0.0.1 -d build | только локально и из папки build |
python3 -m json.tool file.json | форматирует JSON и проверяет синтаксис |
python3 -m venv .venv | создаёт виртуальное окружение |
python3 -m pip install -r requirements.txt | pip именно этого интерпретатора |
python3 -m zipfile -l archive.zip | список файлов в архиве |
python3 -m zipfile -e archive.zip out/ | распаковать |
python3 -m tarfile -l archive.tar.gz | то же для tar |
python3 -m base64 -d < data.b64 | раскодировать Base64 |
python3 -m calendar 2026 11 | календарь на месяц |
python3 -m timeit "sorted(range(1000))" | замерить скорость выражения |
python3 -m cProfile -s cumtime app.py | профилировать программу |
python3 -m pdb app.py | запустить под отладчиком |
python3 -m site | пути поиска модулей |
python3 -m uuid | UUID версии 4 (Python 3.12+) |
JSON
json.tool умеет больше, чем кажется:
curl -s localhost:8080/api/users | python3 -m json.tool
python3 -m json.tool --sort-keys --indent 2 in.json out.json
python3 -m json.tool --compact in.json # в одну строку
python3 -m json.tool --json-lines events.jsonl # файл с объектом на каждой строкеДостать поле или собрать список, если нет jq:
python3 -c 'import json,sys; print(json.load(sys.stdin)["version"])' < package.json
python3 -c 'import json,sys; [print(u["email"]) for u in json.load(sys.stdin)]' < users.json
python3 -c 'import json,sys; d=json.load(sys.stdin); print(len(d), "записей")' < users.jsonДля разового форматирования в браузере есть форматтер JSON.
Текст и строки
Шаблон для построчной обработки — читать sys.stdin, писать в print:
# убрать дубли, сохранив порядок
python3 -c 'import sys; print("".join(dict.fromkeys(sys.stdin)), end="")' < list.txt
# посчитать частоту слов и показать десять самых частых
python3 -c 'import sys,collections; c=collections.Counter(sys.stdin.read().split()); [print(n, w) for w, n in c.most_common(10)]' < text.txt
# сумма чисел из второго столбца
python3 -c 'import sys; print(sum(float(l.split()[1]) for l in sys.stdin if l.strip()))' < data.txt
# самая длинная строка
python3 -c 'import sys; print(max(sys.stdin, key=len), end="")' < file.txt
# перевести в верхний регистр, работает и с кириллицей
python3 -c 'import sys; print(sys.stdin.read().upper(), end="")' < file.txtCSV
# показать один столбец по имени
python3 -c 'import csv,sys; [print(r["email"]) for r in csv.DictReader(sys.stdin)]' < users.csv
# CSV с точкой с запятой из Excel перевести в обычный
python3 -c 'import csv,sys; csv.writer(sys.stdout).writerows(csv.reader(sys.stdin, delimiter=";"))' < in.csv > out.csv
# CSV в JSON
python3 -c 'import csv,json,sys; json.dump(list(csv.DictReader(sys.stdin)), sys.stdout, ensure_ascii=False, indent=2)' < users.csvМодуль csv правильно обрабатывает кавычки и переводы строк внутри полей, чего не умеют cut и awk. Подробнее про формат — в статье о CSV.
Дата и время
# текущее время в UTC в формате ISO 8601
python3 -c 'from datetime import datetime, timezone; print(datetime.now(timezone.utc).isoformat(timespec="seconds"))'
# unix-время в дату
python3 -c 'from datetime import datetime, timezone; print(datetime.fromtimestamp(1767225600, timezone.utc))'
# дата в unix-время
python3 -c 'from datetime import datetime; print(int(datetime.fromisoformat("2026-11-03T12:00:00+03:00").timestamp()))'
# сколько дней между датами
python3 -c 'from datetime import date; print((date(2026,12,31) - date.today()).days)'
# время в другом поясе (Python 3.9+)
python3 -c 'from datetime import datetime; from zoneinfo import ZoneInfo as Z; print(datetime.now(Z("Asia/Vladivostok")))'Хеши, Base64, случайные значения
python3 -c 'import hashlib,sys; print(hashlib.sha256(sys.stdin.buffer.read()).hexdigest())' < file.iso
python3 -c 'import base64,sys; print(base64.b64encode(sys.stdin.buffer.read()).decode())' < logo.png
python3 -c 'import secrets; print(secrets.token_urlsafe(32))' # ключ для настроек
python3 -c 'import secrets; print(secrets.token_hex(16))' # 32 шестнадцатеричных символа
python3 -c 'import uuid; print(uuid.uuid4())'Модуль secrets использует криптографически стойкий генератор. Модуль random для паролей и токенов не подходит: его последовательность можно восстановить по выходу.
Файлы и папки
# десять самых больших файлов в папке, рекурсивно
python3 -c 'import pathlib; fs=sorted((p.stat().st_size, p) for p in pathlib.Path(".").rglob("*") if p.is_file()); [print(s, p) for s, p in fs[-10:]]'
# переименовать *.jpeg в *.jpg
python3 -c 'import pathlib; [p.rename(p.with_suffix(".jpg")) for p in pathlib.Path(".").glob("*.jpeg")]'
# поменять перевод строк CRLF на LF
python3 -c 'import sys; sys.stdout.buffer.write(sys.stdin.buffer.read().replace(b"\r\n", b"\n"))' < win.txt > unix.txtКалькулятор и проверки
python3 -c 'print(2**64)' # большие целые без переполнения
python3 -c 'print(0xff, 0o755, 0b1010)' # системы счисления в десятичную
python3 -c 'print(hex(48879), oct(493), bin(10))'
python3 -c 'print(f"{1234567.891:,.2f}")' # 1,234,567.89
python3 -c 'import math; print(math.ceil(1500/64))' # сколько блоков по 64Интерактивный режим тоже удобен как калькулятор: запустите python3, и переменная _ хранит результат последнего выражения.
Когда пора писать файл
Однострочник хорош, пока он читается. Если в нём появились условия, обработка ошибок или он нужен больше одного раза, сохраните его как скрипт с #!/usr/bin/env python3 в первой строке, добавьте argparse и положите в репозиторий рядом с остальными инструментами.