ProfHelp КОМАНДНАЯ СТРОКА. СПРАВОЧНИК АДМИНИСТРАТОРА
scriptcoding.ru Архивы рубрики Командная строка
Командная строка Microsoft Windows
Командная строка cmd
Командная строка Linux и сценарии оболочки Ричард Блум, Кристина Бреснахэн 2012
Командная строка Linux и автоматизация рутинных задач Колисниченко Денис 2012
Командная строка Linux. Полное руководство Уильям Шоттс 2017
habrahabr.ru Подводные камни Bash
Работа с архиваторами (tar, zip, gz, bzip2) из консоли Linux
youtube.com Lenar Bashirov Командная строка. Администрирование Windows
github.com Искусство командной строки
Очень полезные команды Linux на одном листе
Справочник основных команд Linux с примерами
http://uzverss.livejournal.com/58699.html
Соответствие команд MS DOS командам Linux
http://uzverss.livejournal.com/53228.html
ab57.ru Настройка командной строки Windows.
http://uzverss.livejournal.com/37412.html
ab57.ru Список команд Windows ( Windows CMD )
Самый полный справочник по параметрам командной строки Windows
Средства командной строки
Windows Script Host (WSH)

PDF-версия статей про Bash-скрипты
Скачать PDF-версию
доступ к переводу в GoogleDocs
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
[в закладки] PDF-версия статей про Bash-скрипты

Оболочка Bash — шпаргалка для начинающих
Перенаправления в bash
Подводные камни Bash
18 отборных однострочных команд Linux
uzverss Искусство программирования на языке сценариев командной оболочки
uzverss Список команд Windows ( Windows CMD )
Разработка консольных приложений и автоматизация задач на PHP: старый добрый язык как знакомая замена Bash
uzverss консоль python в роли командной строки


Приложение "Командная строка", запускаемое через стандартное меню Windows, можно сделать более удобным в использовании, немного изменив его свойства под свои предпочтения. Часть настроек можно выполнить изменением свойств ярлыка, с помощью которого выполняется запуск командной строки, а часть - редактированием реестра Windows.
Read more... )


http://ab57.ru/cmdtweak.html
консольная подборка




прочитать
консоль python в роли командной строки LJ
консоль python в роли командной строки DW

Настройка командной строки Windows
http://ab57.ru/cmdtweak.html

https://b14esh.com/category/windows/cmd-vbs-scripts
Альтернативный терминал для Windows
Ламповый Linux-like терминал в Windows
Делаем из cmd конфетку

https://github.com/PowerShell/PowerShell/releases
https://github.com/Microsoft/PowerShell-DSC-for-Linux/releases
https://github.com/microsoft/Terminal

http://intgat.tigress.co.uk/rmy/busybox/index.html
http://blog.acmenet.ru/2014/09/26/gnu-on-windows/
http://forum.farmanager.com/viewtopic.php?t=3153
http://daverupert.com/2015/10/windows-editors-and-shells/

https://github.com/alebcay/awesome-shell
https://github.com/k4m4/terminals-are-sexy
https://github.com/agarrharr/awesome-cli-apps
https://github.com/herrbischoff/awesome-command-line-apps

https://conemu.github.io/
https://sourceforge.net/projects/conemu/
https://sourceforge.net/projects/console/files/
https://www.gammadyne.com/cmdline.htm#gs
https://ttssh2.osdn.jp/index.html.en
http://www.powercmd.com/
http://www.ttyemulator.com/
http://www.softwareok.com/?seite=Freeware/ColorConsole
http://mridgers.github.io/clink/
https://sourceforge.net/projects/pycmd
https://github.com/cbucher/console/releases
http://cmder.net/
https://github.com/wez/wezterm
https://github.com/Eugeny/tabby
https://github.com/alacritty/alacritty

https://ru.wikipedia.org/wiki/MinGW
http://www.mingw.org/wiki/MSYS
https://mintty.github.io/
https://github.com/mintty/wsltty
https://github.com/sedwards2009/extraterm
http://babun.github.io/
https://github.com/bmatzelle/gow
http://domterm.org/index.html

https://cygwin.com/
https://msys2.github.io/
https://sourceforge.net/projects/mingw-w64/
https://gnuwin32.sourceforge.net/
https://unxutils.sourceforge.net/
https://win-bash.sourceforge.net/
https://frippery.org/busybox/
https://sourceforge.net/projects/busybox-for-windows/
https://github.com/bmatzelle/gow/


https://hyper.is/
https://github.com/dthree/cash
http://www.netsarang.com/download/down_xsh5.html
https://eugeny.github.io/terminus/
https://github.com/Eugeny/terminus/releases
https://github.com/felixse/FluentTerminal/releases
https://github.com/electerm/electerm
https://github.com/WindowsTermKit/TermKit
https://github.com/jwilm/alacritty/releases

http://xon.sh/windows.html
http://web-console.org/
https://httpie.org/run

https://code.google.com/archive/p/hotwire-shell/wikis/HotwireWindows.wiki
https://www.opennet.ru/tips/2963_ubuntu_windows_bash_wsl.shtml
https://support.microsoft.com/ru-ru/kb/324081
https://technet.microsoft.com/ru-ru/library/cc771672.aspx
https://www.microsoft.com/en-us/download/details.aspx?id=2391
https://github.com/wishstudio/flinux

https://play.google.com/store/apps/details?id=com.termux&hl=ru

https://google.github.io/styleguide/shell.xml
https://github.com/paradoxxxzero/butterfly

http://download.sysinternals.com/files/PSTools.zip

https://www.emtec.com/zoc/index.html
https://jpsoft.com/products/tcc-le.html
https://jpsoft.com/products/take-command.html
https://www.brainasoft.com/firecmd/

http://mikelev.in/ux/

https://www.openssh.com/
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
http://www.9bis.net/kitty/#!index.md
https://mobaxterm.mobatek.net/
https://www.hamiltonlabs.com/Cshell.htm
https://mremoteng.org/

Средства командной строки
Создание сценариев PowerShell
Windows Script Host (WSH)
Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Что такое Windows PowerShell и с чем его едят? Часть 2: введение в язык программирования

Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
[в закладки] PDF-версия статей про Bash-скрипты

Оболочка Bash — шпаргалка для начинающих
https://cheatsheets.zip/bash
https://wiki.bash-hackers.org/
bash-hackers.org translate
uzverss Искусство программирования на языке сценариев командной оболочки

https://www.opennet.ru/docs/RUS/bash_scripting_guide/
http://linuxcommand.org/tlcl.php
https://leanpub.com/programming-from-scratch
Командная строка Linux. Полное руководство. 2-е изд торрент
Командная строка Linux. Полное руководство. 2-е изд яндекс диск

Большая поваренная книга программиста.
https://github.com/najomi/data

комбинация клавиш, которая позволяет обратиться напрямую в ядро, минуя всяческие программы и оболочки

Alt + SysRq + B. Равнозначно нажатию кнопки Reset. Нежелательно, ибо высока вероятность потерять несохранённые данные.
Alt + SysRq + O. Выключает систему корректным образом.
Alt + SysRq + S. Синхронизует систему. Если выполнить перед первой командой, то можно не бояться за данные.
Alt + SysRq + K. Перезагружвет графическую оболочку. Выполнять, если всё зависло и не отвечает.
Alt + SysRq + R. Если не хочешь перезагружать иксы, отвиснет твою мышку и клавиатуру.
Alt + SysRq + H. Выводит вышеуказанные и все прочие доступные команды.


Горячие клавиши терминала в Linux
Полезные горячие клавиши для Bash
Управление процессами
Ctrl + C - прервать процесс (послать сигнал Interrupt). SIGINT
Ctrl + \\ - Отправляет сигнал SIGQUIT
Ctrl+ D - Закрывает bash оболочку вместе с процессами. Схожа с командой exit.
Ctrl + Z - приостановить процесс (послать сигнал Stop).
помощью команды bg его можно снова запустить, оставив при этом в фоновом режиме. Команда fg не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план fs process_name.

Управление экраном
Ctrl + L - очистить экран. Аналог команде clear.
Ctrl + S: Останавливает весь вывод на экране. Это полезно когда необходимо временно остановить запущенный процесс.
Ctrl + Q: Продолжает работу и отображение вывода после ее остановки.

Перемещение курсора
Ctrl + A - переместить курсор в начало строки.
Ctrl + E - переместить курсор в конец строки (E - End).
Alt + F - переместить курсор на одно слово вперед (F - Forward).
Alt + B - переместить курсор на одно слово назад (B - Back).
Ctrl + F - переместить курсор на один символ вперед (F - Forward).
Ctrl + B - переместить курсор на один символ назад (B - Back).
Ctrl + XX: При повторном исполнении команды, курсор будет двигаться между началом линии и текущей позиции курсора.

Редактирование текста
Ctrl + D - удалить символ под курсором (D - Delete).
Alt + T - поменять местами два слова. Слово под курсором меняется со словом слева от курсора (T - Translocate)
Ctrl + T - поменять местами два символа. Символ под курсором меняется с символом слева от курсора (T - Translocate).
Alt + L - перевести символы в нижний регистр, начиная с символа под курсором и до конца слова (L - Lowercase).
Alt + U - перевести символы в верхний регистр, начиная с символа под курсором и до конца слова (U - Uppercase).
Alt + C: После курсора первый символ слова переводится в верхний регистр.

Вырезание и вставка текста
Ctrl + K - вырезать текст от курсора до конца строки (K - Kill).
Ctrl + U - вырезать текст от курсора до начала строки.
Alt + D - вырезать слово от курсора до его конца (D - Delete).
Alt + Backspace - вырезать слово от курсора до его начала. Если курсор находится на начале слова, то удаляется предыдущее слово.
Ctrl + W - Делает вырезку слова перед курсором и добавляет его в буфер.
Ctrl + Y - вставить вырезанный текст из буфера обмена на место курсора.

Дополнение команды
Tab - дополнить текст команды. (ls essa => ls essay.txt)
Alt + ? - вывести все варианты дополнения (тоже если нажать Tab дважды).
Alt + * - вставить все варианты дополнения в аргументы команды.

Поиск команд в истории
Ctrl + R - начать поиск команд в истории. Нажмите еще раз чтобы двигаться вверх по истории. Нажмите Enter чтобы выполнить найденную команду.
Ctrl + G - прекратить поиск команд в истории. Выход из режима.
Ctrl + J - вставить найденную команду в терминал, без выполнения.
Ctrl + P или Up Arrow - показать предыдущую запись в истории. Аналог клавише со стрелкой вверх. (P - uP).
Ctrl + N или Down Arrow - показать следующую запись в истории. Аналог клавише со стрелкой вниз. (N - dowN).
Alt + < - перейти к первой записи в истории.
Alt + > - перейти к последней записи в истории.
Alt + N - поиск в прямом порядке (ввести команду и нажать Enter).
Alt + P - поиск в обратном порядке (ввести команду и нажать Enter).
Ctrl + O - выполнить команду из истории и перейти к выполнению следующей по списку. Работает только в поиске Ctrl + R.

Режим
По умолчанию bash использует комбинации в стиле редактора emacs. Можно переключать в режим редактора vi
$ set -o vi # vi mode
$ set -o emacs # default mode


Команды управления терминалом
Text-Terminal-HOWTO
Хрестоматия по программированию на Си в Unix 6.4. Сигналы.

Искусство программирования на языке сценариев командной оболочки Mendel Cooper
Искусство программирования на языке сценариев командной оболочки
Особенности работы в оболочке bash
BASH Programming - Introduction HOW-TO
Программирование на Shell (Unix) Учебное пособие А. Соловьев
Оформление вывода в shell-сценариях
Оболочка Bash — шпаргалка для начинающих
Перенаправления в bash
Перенаправления в bash
Как повысить эффективность Bash-скриптов
Подводные камни Bash
Подводные камни Bash
Частые ошибки программирования на Bash
18 отборных однострочных команд Linux
Осторожнее с редактированием bash-скриптов
Как "освободить" клавиши Ctrl+C, Ctrl+V, Ctrl+X в терминале
«Намертво прибитая к ядру» графическая подсистема

обзор Лучшие терминалы для Linux
Консоль 21 века: mosh, tmux, fish
Final Term: новый взгляд на терминал
TermKit: новая концепция консоли с графическим выводом
Hotwire: консоль и графическое окно одновременно

Полезные команды Linux, о которых вы не знали
Самые полезные приёмы работы в командной строке Linux
Работа с последовательным портом из консоли Linux
Наиболее используемые команды MySQL

uzverss Командная строка. справочник администратора
http://hex.pp.ua/nt-native-applications-shell.php
shell для винды + доп проги
Запуск NodeJS-приложения на Android

рабочий стол в консоли LJ
рабочий стол в консоли DW



консоль python в роли командной строки часть 1 LJ
консоль python в роли командной строки часть 1 DW

заглянуть

Работа с WWW



сервер
запускает HTTP для всех локальных интерфейсов на порту 8080
python -m SimpleHTTPServer 8080 # python2
python3 -m http.server 8080

python3 -m http.server 8080 --cgi # запустить в папке, где находится каталог cgi-bin
# со сценарием cgi

открыть в браузере адреса
http://0.0.0.0:8080/ или http://localhost:8080/ или http://127.0.0.1:8080/

python -m SimpleHTTPServer # без указания порта запустит сервер на порту 8000
python3 -m http.server

запускает сервер SMTP на порту 1025
python -m smtpd -n -c DebuggingServer localhost:1025
запустить сервер SMTP на стандартном порту 25
sudo python -m smtpd -n -c DebuggingServer localhost:25

http://rus-linux.net/nlib.php?name=/MyLDP/consol/oneliners.html

работа с http

import webbrowser
webbrowser.open('http://www.habrahabr.ru/') # открыть ссылку в браузере
webbrowser.open(u'file://home/user/mysite.html')
webbrowser.open(u'mailto:foo@bar.com?subject=Feedback%20message') # открыть почтовый клиент создать письмо
http://habrahabr.ru/post/62383/
если нет модуля webbrowser то
apt-get install python-pip python3-pip
pip install webbrowser
http://rtfm.co.ua/python-utilita-pip-pypi/
http://asvetlov.blogspot.ru/2014/05/pip.html
import urllib2
urllib2.urlopen('http://www.example.com/').read()
# скачать файл по протоколу http

работа с ftp

from ftplib import FTP
f = FTP('ftp.gnu.org')
f.login('','') # f.login('login', 'password')
for x in f.nlst()[:9]: print(x)
L = []
f.dir(L.append)
for x in L[:15]: print(x)
f.nlst()
f.dir()
f.nlst()[17]
remotefiles=f.nlst()[17]
localdir = '/home/user/path/'
localpath = os.path.join(localdir, remotefiles)
localfile = open(localpath, 'wb')
f.retrbinary('RETR ' + remotefiles, localfile.write)
localfile.close()
import os
os.listdir()

pypi install wget
import wget
wget.download("http://www.python.org/")


Экранирование тегов html



>>> import cgi
>>> cgi.escape('a < b > c & d "spam"', 1)
'a &lt; b &gt; c &amp; d &quot;spam&quot;'
>>> s = cgi.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>>
>>> import html
>>> html.escape('a < b > c & d "spam"', 1)
'a &lt; b &gt; c &amp; d &quot;spam&quot;'
>>> s = html.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'

>>> import cgi, html.parser
>>> s = cgi.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>>
>>> html.parser.HTMLParser().unescape(s)
'1<2 <b>hello</b>'
>>>
>>> import html, html.parser
>>> s = html.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>> html.parser.HTMLParser().unescape(s)
'1<2 <b>hello</b>'

>>> import urllib.parse
>>> urllib.parse.quote("a & b #! c")
'a%20%26%20b%20%23%21%20c'
>>> urllib.parse.quote_plus("C:\stuff\spam.txt")
'C%3A%5Cstuff%5Cspam.txt'
>>> x = urllib.parse.quote_plus("a & b #! c")
>>> x
'a+%26+b+%23%21+c'
>>> urllib.parse.unquote_plus(x)
'a & b #! c'


Экранирование адресов URL



>>> import urllib.parse
>>> b='http://lurkmore.to/Монти_Пайтон'
>>> urllib.parse.quote(b)
'http%3A//lurkmore.to/%D0%9C%D0%BE%D0%BD%D1%82%D0%B8_%D0%9F%D0%B0%D0%B9%D1%82%D0%BE%D0%BD'
>>> d=urllib.parse.quote(b)
>>> d
'http%3A//lurkmore.to/%D0%9C%D0%BE%D0%BD%D1%82%D0%B8_%D0%9F%D0%B0%D0%B9%D1%82%D0%BE%D0%BD'
>>> urllib.parse.unquote(d)
'http://lurkmore.to/Монти_Пайтон'


Экранирование адресов URL с якорями
python3
>>>
>>> import urllib.parse
>>> s='http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python#.D0.9E.D1.80.D0.B8.D0.B3.D0.B8.D0.BD.D0.B0.D0.BB'
>>> (a,b)=s.split('#')
>>> a
'http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python'
>>> b
'.D0.9E.D1.80.D0.B8.D0.B3.D0.B8.D0.BD.D0.B0.D0.BB' 
>>> b=b.replace('.','%')
>>> b
'%D0%9E%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB' 
>>> j=a+'#'+b
>>> j
'http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python#%D0%9E%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB'
>>> 
>>> l=urllib.parse.unquote(j)
>>> l
'http://lurkmore.to/Копипаста:Python#Оригинал'



Почтовые вложения и ссылки base64



>>> import base64
>>> base64.b64decode('aHR0cDovLzR1ZnJlZS50ay9tZWRpYTcyMzY0Ni9mdWVuZi8wMzYubXAz')
b'http://4ufree.tk/media723646/fuenf/036.mp3' 



Шифрование



a ^ b ^ b == a

>>> 1925^99
2022
>>> 2022^99
1925

шифрование искажение символов (простое)
sys.stderr.write('using simple\n')
adder = 1
def do_encode(pswd):
    pswd = 'vs' + pswd + '48'
    res = ''
    for char in pswd:
        res += chr(ord(char) + adder) # увеличить каждый код ASCII
    return str(res)
def do_decode(pswd):
    pswd = pswd[2:-2]
    res = ''
    for char in pswd:
        res += chr(ord(char) - adder)
    return res

http://pythonlearn.ru/без-рубрики/shifrovanie-strok-s-pomoshhyu-modulya-hashlib-python/
>>> import hashlib
>>> h = hashlib.sha1(b"password")
>>> h = hashlib.sha1()
>>> h.update(b"password")
>>> h = hashlib.sha1(b"password")
>>> h.digest()
'[\xaaa\xe4\xc9\xb9??\x06\x82%\x0bl\xf83\x1b~\xe6\x8f\xd8'
>>> h.hexdigest()
'5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'

>>> import hashlib
>>> h = hashlib.md5(b"password")
>>> p = h.hexdigest()
>>> p
'5f4dcc3b5aa765d61d8327deb882cf99'
>>> p    # Пароль, сохраненный в базе
'5f4dcc3b5aa765d61d8327deb882cf99'
>>> h2 = hashlib.md5(b"password")   # Пароль, введенный пользователем
>>> if p == h2.hexdigest(): print("Пароль правильный")
... 
Пароль правильный

http://ivinside.blogspot.ru/2012/04/aes-pycrypto.html
from Crypto.Cipher import AES
import base64
import os
# размер блока шифрования
BLOCK_SIZE = 32
# символ, использующийся для дополнения шифруемых данных
# до размера, кратного 32 байтам
PADDING = '{'
# функция дополнения
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
# функции шифрования и расшифрования
# результат дополнительно обертывается в base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
# генерируем ключ
secret = os.urandom(BLOCK_SIZE)
# создаем объект
cipher = AES.new(secret)
# шифруем строку
encoded = EncodeAES(cipher, 'password')
print 'Encrypted string:', encoded
# расшифровываем строку
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded


Простое шифрование с openssl
http://www.py-my.ru/post/554f1ca43ad2ff04ff2d41ba
Шифруем:
openssl aes-256-cbc -in input_file -out output_file
Дешифруем:
openssl aes-256-cbc -d -in input_file -out output_file
При выполнении запрашивается пароль.


Изображения



мануал

Pillow
$ pip install Pillow
from PIL import Image, ImageFilter
# Считываем изображение
im = Image.open( 'image.jpg' )
# Показываем изображение
im.show()
# Применяем фильтр к изображению
im_sharp = im.filter( ImageFilter.SHARPEN )
# Сохраняем отфильтрованное изображение в новый файл
im_sharp.save( 'image_sharpened.jpg', 'JPEG' )
# Разбиваем изображение на соответствующие bands (то есть на красный, зеленый # и синий для RGB) r,g,b = im_sharp.split()
# Просматриваем данные EXIF, встроенные в изображение
exif_data = im._getexif() exif_data

Как легко вырезать фон на изображении с помощью Python
# pip install rembg pillow
from rembg import remove
from PIL import Image
input_path = "in.png"
output_path = "out.png"
input = Image.open(input_path)
output = remove(input)
output.save(output_path)

python rembg - изменить цвет фона
это даст вам вывод с полностью красным фоном.
removeim = remove(im,bgcolor=[255,0,0,255])
измените bgcolor=[255,0,0,255] на bgcolor=[0,255,0,255], чтобы получить полностью зеленый фон.


cv2
распознавание лиц в реальном времени, видео в реальном времени
https://github.com/Itseez/opencv/blob/master/samples/python/facedetect.py

http://tinyurl.com/opencv3-py-tutorial
http://tinyurl.com/opencv3-py3-ubuntu
http://tinyurl.com/opencv3-py3-anaconda

from cv2 import * import numpy as np
# Считываем изображение img = cv2.imread('testimg.jpg')
# Показываем изображение
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Применяем к изображению фильтр Grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Сохраняем отфильтрованное изображение в новый файл
cv2.imwrite('graytest.jpg',gray)

Scikit-Image
http://scikit-image.org/docs/dev/auto_examples/


Разные модули



модуль Wget
https://pypi.python.org/pypi/wget
>>> import wget
>>> wget.download("http://www.python.org/")
или
python -m wget [options]

модуль xonsh
http://xon.sh/
Xonsh is a Python-ish, BASHwards-looking shell language and command prompt.


модуль sh
http://amoffat.github.io/sh/
>>> from sh import tar
>>> tar("cvf", "/tmp/test.tar", "/my/home/directory/")

>>> from sh import ls
>>> print(ls("/"))

>>> from sh import ifconfig
>>> print(ifconfig("wlan0"))

>>> from sh import find
>>> find("/tmp")

psutil
https://github.com/giampaolo/psutil
>>> import psutil
>>> psutil.cpu_times()
>>> psutil.virtual_memory()
>>> psutil.swap_memory()
>>> psutil.disk_partitions()
>>> psutil.disk_usage('/')
>>> psutil.net_io_counters(pernic=True)
>>> psutil.net_connections()
>>> psutil.net_if_addrs()
>>> psutil.net_if_stats()
>>> psutil.users()
....................

PyAutoGui модуль управления компьютером
pip install pyautogui

import pyautogui as pg

# Получение позиции мыши и вывод в консоль
print(pg.position())

# Передвижение мыши
pg.move(50, 50, duration=0.5)
pg.moveTo(150, 200, 0.5) # Передвигаем к точке относительно экрана

# Нажатие мышкой по определенной точке
pg.click(769, 101)
pg.doubleclick(769, 101) # двойное нажатие
pg.rightclick(769, 101) # нажатие правой кнопкной мыши
pg.leftclick(769, 101) # нажатие левой кнопкной мыши

# Ввод текста
pg.typewrite("itproger.com")
# Выполнения нажатия на клавишу
pg.typewrite(["enter"])

# Выполнения нажатия на сочетание клавиш
pg.hotkey("winleft")
pg.hotkey("winleft", "up")
pg.hotkey("ctrl", "t")

# Вызов различных всплывающих окон
pg.alert("Окно с информацией", "Название окна", button="Текст на кнопке")
age = pg.prompt("Укажите возраст: ", "Название окна")
print(age)
pg.confirm("Вам больше 18?", "Название окна", ("Да, точно", "Нет"))
pg.password("Введите пароль", "Название окна")

# Создание скриншота
pg.screenshot("yourPic.png")

# Мини программа
website = pg.prompt("Введите название сайта:", "Веб сайт", "https://")
pg.click(769, 101)
pg.typewrite(website)
pg.typewrite(["enter"])
pg.screenshot("yourPic.png")



Отладка в python через консоль



href="http://www.py-my.ru/post/4e37737b1d41c8451b000002

Запуск скрипта в отладчике

$ python -m pdb script.py

Либо можно прописать запуск отладчика в самом скрипте, для этого нужно добавить код

import pdb
pdb.set_trace()
Команды
help       Список команд
list	   Отображение листинга, отображает точки останова - "B" в начале строки
list s,e   Часть листинга: s - начальная строка, e - конечная строка
next	   Выполнить следующую команду текущего метода
step	   Выполнить следующую команду со входом внутрь методов
return	   Выполнить текущий метод до конца
until	   Выполнить до конца метода/цикла
args	   Вывести список локальных переменных
locals()   Отображение текущей области видимости (команда не отладчика)
quit	   Выйти из отладчика
where	   Определить текущее местоположение
up	   Перемещение по стеку вверх
down	   Перемещение по стеку вниз
p value	   Вывести на экран значение (print)
pp value   Более красивый вывод на экран
!command   Выполнить произвольную команду
jump       Перейти на строку (выполнить до строки)
run [ 'script.py', 'a', 'b', 'c']	Перезапуск скрипта с параметрами
alias pl pp %1	Создать алиас команды, %1 - входящий параметр
unalias pl	Удаление алиаса

Точки останова
break	        Просмотр установленных т.о. и их номеров
disable 1	Отключить т.о. по номеру
enable 1	Включить т.о. по номеру
break 15	Установить т.о. на указанной строке
break foo	Установить т.о. на методе
break ../script2.py:15	Установить т.о. в другом файле
break 15, i>7	Установить т.о. с условием
condition 1 i>0	Назначить условие на существующую т.о.
tbreak 15	Временная т.о., удаляется при достижении
continue	Продолжить выполнение скрипта
clear	        Удалить все т.о.
clear 1	        Удалить т.о. под номером 1
ignore 1 10	Установка счетчика "не срабатывания", для т.о. 1, пропустить 10 остановок
commands 1
...
end	        Создать сценарий для т.о. 1

Настройки по умолчанию можно сохранить в файле ~/.pdbrc и ./.pdbrc (последний переопределяет настройки первого)

Кратко в деталях
https://unixhow.com/3849/kak-zapustit-python-skript-v-rezhime-otladki
Вам нужно запустить ваш скрипт на пайтоне, используя модель pdb (Python Debug):

python -m pdb merge_lists.py

Увидите нечто такое:

python -m pdb merge_lists.py
> /Users/and3001/Documents/Personal/Coding/Python/merge_lists.py(3)()
-> my_list     = [3, 4, 6, 10, 11, 15]
(Pdb)

Что бы продолжить работу, нажмите n (next). Так пошагово разберете все шаги вашего скрипта.

(Pdb) n
> /Users/and3001/Documents/Personal/Coding/Python/merge_lists.py(4)()
-> alices_list = [1, 5, 8, 12, 14, 19]
(Pdb)

Что бы выйти, нажмите q


Разное



выполнение строки
python3 -c "print(bin(255))"
echo "print(bin(255))" |python3

документация по модулям
pydoc -p 8080
http://localhost:8080/

вывод AST и cкомпилированного кода в веб-интерфейсе
$ pip install instaviz
vi test.py


python3 test.py

printf
https://stackoverflow.com/questions/63627692/making-the-printf-function-of-c-into-python
https://stackoverflow.com/questions/19457227/how-to-print-like-printf-in-python3
импорт из Си

import ctypes
libc = ctypes.cdll.LoadLibrary("libc.so.6")
printf = libc.printf
printf(b'num: %d, txt: %s\n', 42, b'Hello World') # b' - обязательно

импорт из sys

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

printf('num: %d, txt: %s\n', 42, 'Hello World')

сделать функцию

def printf(text, *args):
    print(text % args)

printf('num: %d, txt: %s\n', 42, 'Hello World')


привести код в порядок
python3 -m pip install flake8
flake8 myscript.py # проверить как и где именно нарушается стиль

python3 -m pip install black
black --check myscript.py # проверить будет ли black изменять файл
black --diff myscript.py # показать изменения
black myscript.py # отформатировать

показать текущее время с датой
>>> impotr time
>>> time.ctime(time.time())
>>> time.asctime()

Uuid

>>> import uuid
>>> print uuid.uuid4()
# e7bafa3d-274e-4b0a-b9cc-d898957b4b61

Progressbar


узнать все зарезервированные слова
>>> import keyword
>>> keyword.kwlist

li=[]
if not li: print "empty" # проверить список на пустоту

"12345".zfill(10) # дополнить строку нулями

hasattr(a,'attributename') # узнать имеет ли объект атрибут в Python?

сделать отсортированный список по значениям из cловаря

newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])

разбить список на части одинакового размера
def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]


выполнить код в зависимости от версии интерпретатора
import sys
import __future__

if sys.version_info[0] == 2:
    # Python 2 code
else:
    # Python 3 code

или
if sys.version[:1] == '2':
    # Python 2 code
else:
    # Python 3 code


найти файл либы
аналог
ldconfig -p |grep udev

import ctypes.util
ctypes.util.find_library("udev")

в сборке с musl не работает, поэтому патч
https://git.alpinelinux.org/aports/tree/main/python3/musl-find_library.patch

Поймать несколько исключений в одной строке
except (Exception1, Exception2) as e: pass

http://www.user.su/Основы_Python
http://jenyay.net/Programming/Python

легендарный FuzzBuzz
https://megamozg.ru/post/23556/
https://megamozg.ru/post/10308/
В поисках компактного FizzBuzz на Python
a = list(range(1, 101))
for i in a:
    if i%15 == 0: print(i, 'FuzzBuzz')
    if i%3 == 0 and i%15!=0: print(i, 'Fuzz')
    if i%5 == 0 and i%15!=0: print(i, 'Buzz')

Начнём со стандартного, классического решения:
for i in range(1, 101):
    if i%3==0 and i%5==0:
        print('FizzBuzz')
    elif i%3==0:
            print('Fizz')
    elif i%5==0:
            print('Buzz')
    else:
        print(i)

Укладываем стандартное решение в стандартный однострочник
print('\n'.join('FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else str(i) for i in range(1, 101)))

Избавляемся от Join, приручаем Print
[print('FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i) for i in range(1, 101)]

Добавляем срез, укрощаем if else
[print('FizzBuzz'[4 if i%3 else 0:4 if i%5 else 8] or i) for i in range(1, 101)]

Оптимизируем срез, избавляемся от if else
[print('FizzBuzz'[i*i%3*4:8--i**4%5] or i) for i in range(1, 101)]

Сократили неплохо. Но, похоже с этой вариацией дальше не продвинуться. Пробуем иной вариант.
Заменяем срез конкатенацией, вертаем оператор modulo
[print('Fizz'*(i%3==0)+'Buzz'*(i%5==0) or i) for i in range(1, 101)]

Оптимизируем решение. Выравниваем по длине со срезом
[print((i%3<1)*'Fizz'+(i%5<1)*'Buzz' or i) for i in range(1, 101)]

Уходим в отрыв. Модифицируем окончательный вариант
[print(i%3//2*'Fizz'+i%5//4*'Buzz' or i+1) for i in range(100)]

А если избавиться от списка, будет ещё короче и, возможно, быстрее:
for i in range(100):print(i%3//2*'Fizz'+i%5//4*'Buzz'or i+1)




pyperclip
взято тут
видеоуроки по теме

pip3 install pyperclip




Занимательные фигуры на Python в одну строку
странности
(Link)
>>> type( {} ),type( { () } )
(, )

>>> 1, + 2,
(1, 2)

>>> (1,) + (2,)
(1, 2)

>>> (1,) + 2,
Traceback (most recent call last):
File "<input ... >", line 1, in 
(1,) + 2

>>> __ = [1,2]; _= range(5);[_ for _ in _ if _ not in __]
[0, 3, 4]

>>> __
[1, 2]



Кристиан Майер «Однострочники Python» 2022
https://github.com/finxter/PythonOneLiners



консоль python в роли командной строки часть 2 LJ
консоль python в роли командной строки часть 2 DW

заглянуть

Модули



Шоу Энтони «Внутри CPython» 2023

узнать конфигурацию сборки python
python3 -m sysconfig

документация по модулям
pydoc -p 8080
http://localhost:8080/

импорт из github.com
https://github.com/nvbn/import_from_github_com
pip install import_from_github_com

чтобы загрузить модуль нужно его импортировать: import модуль, например
import os
удалить модуль (или переменную)
del os

узнать все модули:
pydoc3 -b
pydoc -b

или вбить в консоли python
help('modules')
pip freeze

узнать что входит в модуль:
import sys
sys. # нажать на Tab

узнать где расположен файл с модулем
import модуль
print(модуль.__file__)

Встроенные функции Python содержатся в модуле __builtin__(импортировать его для использования функций не нужно):
dir(__builtins__)
__builtins__. # нажать на Tab

В возвращаемом функцией dir() списке не содержится встроенных функций и переменных. Если вы хотите получить их список, то они определены в стандартном модуле builtins
builtins - встроенные модули, у которых отсутствует имя файла
>>> import builtins
>>> dir(builtins)
>>> import pprint, sys
>>> pprint.pprint(sys.modules)
>>> pprint.pprint(sys.path)

sys.path представляет собой список файловых путей, в которых лежат модули
интерпретарор ищет модули вначале в текущем каталоге, а затем в каталогах, указанных в переменной окружения PYTHONPATH

Получаем список переменных внутри функции
>>> print(locals())
>>> print(globals())
Функция locals() возвращает словарь переменных из текущего пространства имён Ключи словаря — названия переменных, а значения — это их значения.
С помощью похожей функции globals() можно получить все переменные конкретного модуля в таком же виде


пути загрузки модулей
import sys
print(sys.path)

автоматический путь к каталогу с модулями
import sys
sys.path.append(f"/usr/lib/python{sys.version_info.major}.{sys.version_info.minor}/mprdaemon")

import platform
print(f'/usr/lib/python{platform.python_version()[:3]}/distutils') # каталог distutils дан для примера
sys.path.append(f'/usr/lib/python{platform.python_version()[:3]}/distutils')

Откуда грузятся модули?
__import__
sys.modules
sys.path
.pth файлы
sys.meta_path
sys.path_hooks
sys.path_import_cache
http://pep8.ru/doc/tutorial-3.1/6.html
http://asvetlov.blogspot.ru/2010/05/2.html

Решение проблем с модулями и пакетами Python

impotr time
time.ctime(time.time()) # показать текущее время с датой
time.asctime()

import os
os.system('команда') # запустит команду, напр. os.system('mc')
os.getcwd() # узнать местонахождение
os.chdir('/home') # переместится в /home
os.listdir('/usr/src') # узнать что находится в /usr/src
print os.path.isfile('fname') # проверить, существует ли файл
os.stat('/home/user/2') # узнать сведения о файле или каталоге /home/user/2
os.path.getsize('/home/user/path/hello.txt') # узнать размер файла
list(os.popen('du -sh /home/user/path')) # узнать размер каталога path
os.mkdir('/home/user/path') # создать каталог /home/user/path
os.makedirs('/home/user/path/1/1/1/1') # Создать каталог и промежуточные каталоги
os.rmdir('/home/user/path') # удалить каталог /home/user/path
os.removedirs('/home/user/path/1/1/1/1') # автоматически удалит все пустые родительские каталоги (~/1/1/1)
os.remove('/home/user/path/hello.txt') # удалит файл hello.txt
os.rename('/home/user/path', '/home/user/tmp/path') # переименует (или перенесёт в существующий каталог) каатог или файл
os.symlink('/home/user/path', '/home/user/22') # создаст символическую ссылку с именем 22
os.system('id') # узнать свой id
os.chown('/home/user/path', uid, gid ) # сменить владельца -uid, группу - gid
uid root - 0, gid root - 0
os.chmod('/home/user/path' 0o100644) # дать права (в восьмеричной системе)

oct(число) # число в восьмеричной системе
hex(число) # в шестнадцатеричной
bin(число) # в двоичной
int(0o1000) # 512 в десятеричной
int(0b1000) # 8
int(0x1000) # 4096

import shutil
shutil.copyfile('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, метаданные (права и тд) не копирует
shutil.copy('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, копирует метаданные
shutil.copy2('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, полное копирование метаданных
shutil.move('/home/user/path', '/home/user/tmp/tmp/tmp') # переместить/переименовать каталог/файл если промежуточных каталогов нет, то создаст оные
shutil.move('/home/user/path/hello.txt', '/home/user/tmp') # перенесёт с тем же именем в каталог tmp
shutil.copytree('/home/user/path', '/home/user/tmp/new') # скопирует каталог path со всем содержимым (дерево каталогов) в tmp с именем new
shutil.rmtree('/home/user/tmp/new') # удалит каталог new со всем содержимым


Управление модулями, pip



wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

$ pip help # помощь по доступным командам.
$ pip install package_name # установка пакета(ов).
$ pip uninstall package_name # удаление пакета(ов).
$ pip-autoremove package_name # удаление пакета(ов), с установленными зависимостями
$ pip install -U # обновление пакета(ов).
$ pip install --force-reinstall # при обновлении, переустановить пакет, даже если он последней версии.
$ pip list # Смотрим на список установленных (доступных) библиотек
$ pip list -o # узнать, какие библиотеки можно обновить
$ pip show package_name # узнать версию, местонахождение на диске и зависимости.
$ pip search pycp # покажет список всех пакетов, в названии которых есть pycp
$ pip --proxy user:passwd@proxy.server:port # использование с прокси.
$ pip completion --bash >> ~/.bashrc # Автодополнение
http://asvetlov.blogspot.ru/2014/05/pip.html

Как обновить существующие пакеты? (пользоваться осторожно, лучше в virtualenv или pyenv )

$ pip install pip-review
$ pip-review --local --interactive
или
$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
$ for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done
$ sudo pip install -U $(pip freeze | awk '{split($0, a, "=="); print a[1]}')
$ sudo pip install -U $(pip freeze | cut -d '=' -f 1)

http://python.cx/blog/article/3
http://xgu.ru/wiki/Работа_с_модулями_в_Python

Удаление ненужных пакетов

$ pip install pip-autoremove
$ pip install Flask Sphinx
$ pip-autoremove Flask Sphinx -y
http://python.cx/blog/article/PyPi_pip_python


Проверка наличия



Проверка существования переменной в локальной видимости
if 'myVar' in locals():
# myVar exists

Проверка существования переменной в глобальной видимости
if 'myVar' in globals():
# myVar exists

Проверка существования переменной используя исключения
try:
myVar
except NameError:
myVar = None

Проверка существования ключа в словаре способ 1
if key in dictname:
# key exists in dictname

Проверка существования ключа в словаре способ 2
try:
dictname['key']
except KeyError:
dictname['key'] = None

Проверка существования индекса в списке
try:
dictname['1']
except IndexError:
dictname['1'] = None

Проверка наличия метода, свойства в объекте
if hasattr(obj, 'attr_name'):
# obj.attr_name exists


Оболочки, библиотеки



https://ipython.org/
http://xon.sh/
https://amoffat.github.io/sh/
https://github.com/selectel/pyte
https://github.com/eliangcs/http-prompt
http://bpython-interpreter.org/
https://github.com/jonathanslenders/ptpython
https://github.com/jonathanslenders/pymux/
https://github.com/jonathanslenders/python-prompt-toolkit


Исходный код



Посмотреть код функции:
>>> import inspect
>>> import abc
>>> print(inspect.getsourcefile(abc))
/usr/lib/python3.4/abc.py
>>> print(inspect.getsource(abc))
# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs) according to PEP 3119."""

from _weakrefset import WeakSet
.................
>>> print(inspect.getmodule(abc))
<module 'abc' from '/usr/lib/python3.4/abc.py'>
при попытке посмотреть код созданной в интерпретаторе функции выдаст ошибку:
 
>>> def object():
...     print("hello")
... 
>>> print(inspect.getsource(object))
..................
OSError: could not get source code

но это возможно в IPython:

In [1]: def object():
   ...:     print("hello")
   ...:     

In [2]: import inspect

In [3]: print(inspect.getsource(object))
def object():
    print("hello")

или с помощью сторонних модулей:
нужно установить dill
sudo apt install python3-dill
или
sudo pip3 install dill

>>> def object():
...     print("hello")
... 
>>> import dill
>>> print(dill.source.getsource(object))
def object():
    print("hello")

>>> import dis
>>> dis.dis(object)
  2           0 LOAD_GLOBAL              0 (print)
              3 LOAD_CONST               1 ('hello')
              6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
              9 POP_TOP
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE
>>> 


Операции с числами



round(632.742774, 3) # округлит до 632.743 (3 - сколько знаков после запятой)

a=[1, 2, 3, 4]
for x in a: print(x + 3, end = ',')
list(map((lambda x: x + 3), a))

from math import *
D={'S':sin, 'C':cos, 'E':exp}
D['S'](pi/2)
D['C'](pi)
D['E'](1)

http://ru_python.livejournal.com/337028.html
>>> from decimal import Decimal
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.0')
>>> from fractions import Fraction
>>> Fraction(1,10)+Fraction(1,10)+Fraction(1,10)-Fraction(3,10)
Fraction(0, 1)

from fractions import Fraction as fr
>>> fr('1/3') + fr('1/3') + fr('1/3')
Fraction(1, 1)
>>> fr('9/7') - fr('20/21')
Fraction(1, 3)
>>>
>>> from sympy import *
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> x + x + y*3 -y
2*x + 2*y
>>> expand((x+1)*(y-1)**3)
x*y**3 - 3*x*y**2 + 3*x*y - x + y**3 - 3*y**2 + 3*y - 1
>>> expand(cos(x+y), trig=True)
-sin(x)*sin(y) + cos(x)*cos(y)
>>> simplify((x+x*x*y)/x)
x*y + 1
>>> solve(x**2 - y, x)
[-sqrt(y), sqrt(y)]
>>> solve(exp(x)+1, x)
[I*pi]

особенности двоичной математики
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.7-0.5-0.2
-5.551115123125783e-17
>>> (0.1+0.1+0.1-0.3)-(0.7-0.5-0.2)
1.1102230246251565e-16
>>> (0.7-0.5-0.2)-(0.1+0.1+0.1-0.3)
-1.1102230246251565e-16

зато тут магия куда то делась
>>> (0.1+0.1+0.1-0.3)+(0.7-0.5-0.2)
0.0

>>> 0.1 + 0.1 + 0.1 - 0.3 == 1.0 / (2**54)
True
>>> 0.7-0.5-0.2 == -1.0 / (2**54)
True
>>> 5.551115123125783e-17 == 1.0 / (2**54)
True
>>> 0.1 + 0.1 + 0.1 - 0.3 == math.pow(2, -54)
True


Работа с файлами



open('/home/user/path/hello.txt', 'w') # создаст пустой файл (аналог touch hello.txt)

f=open('/home/user/path/hello.txt', 'w') # создать или открыть существующий файл hello.txt на запись
'r' открытие на чтение (является значением по умолчанию).
'w' открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
'x' открытие на запись, если файла не существует, иначе исключение.
'a' открытие на дозапись, информация добавляется в конец файла.
'b' открытие в двоичном режиме.
't' открытие в текстовом режиме (является значением по умолчанию).
'+' открытие на чтение и запись
'r+' означает, что файл доступен как для чтения, так и  для записи,
при этом содержимое существующих файлов сохраняется
'w+', позволяет выполнять операции чтения и записи, но создает файл заново,
уничтожая прежнее его содержимое

f.write('Привет, всё норм.')
f.close()# закрыть файл

f=open('/home/user/path/hello.txt', 'r') # открыть файл на чтение

f.read(8) # читает 8 символов
f.readline() # читает построчно
f.__next__()
next(f)
f.readlines() # читает файл целиком
f.readlines(200) # читает 200 символов
f.seek(0) # перейти в начало файла # цифры - позиция
f.close()

f=open('/home/user/path/hello.txt', 'a') # открыть файл на дозапись
ABC='очень,очень,многобукав' # создание переменной ABC

f.writelines('ABC') # допишет в файл буквы ABC
f.writelines(ABC) # допишет в файл очень,очень,многобукав

for line in output.splitlines(): print(line) # разбить текст на отдельные строки

file.writelines(['Hello file world!\n', 'Bye file world.\n']) # записывает все строки из списка

list(map(str.rstrip, open('/home/user/path/hello.txt').readlines(200))) # прочтёт 200 символов, без /n перевода строки

list(map(str.splitlines, open('/home/user/path/hello.txt').readlines(200)))

open('somefile.txt', 'w').write("G'day Bruce\n") # записать во временный файл
open('somefile.txt', 'r').read() # прочитать временный файл

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
file.close()
with open(filename) as myfile # с применением менеджера контекста (гарантировано закрыть файл после использования)

пример передачи данных с текстового файла в переменную
cat /path/to/file
NAME="file1"
VERSION=1.1.1

def get_version():
    with open('/path/to/file','r') as myfile:
        content = myfile.read()
        values = content.split("\n")
        get_version_file = str(content.split("\n")[content.count('VERSION')]).split('=')[-1]
    return get_version_file

#file_src = get_version()
file_src = '"{0}"'.format(str(get_version())) # чтоб в кавычках было
print("version = ", file_src )

поиск файлов

import glob
glob.glob('/usr/src/*.deb') # покажет список deb пакетов в /usr/src, поиск файлов по маске
os.system('grep -r /usr/lib/python3 -e __all__ ')

сравнение файлов

import filecmp
filecmp('/home/user/path/hello.txt', '/home/user/tmp/hello.txt') # сравнение файлов True - совпадают, False - нет

сравнение каталогов

filecmp.dircmp('/home/user/path', '/home/user/tmp').report() # сравнение каталогов
diff_files - сообщает о разнице меж одноимёнными файлами
same_files - сообщает о идентичных файлах в двух каталогах
common - выводит список общих имён и каталогов
report() - подробный отчёт о сравнении каталогов
report_full_closure() - подробный отчёт сравнения всех каталогов, вложенных файлов и каталогов

http://iakovlev.org/index.html?p=577&m=1&l1=2

Сортируем файлы с помощью Python
https://github.com/lesskop/file-sorter


Работа с БД



C:\...\PP4E\Dbase> python
>>> import dbm                  # получить интерфейс: bsddb, gnu, ndbm, dumb
>>> file = dbm.open('movie', 'c') # создать файл DBM с именем 'movie'
>>> file['Batman'] = 'Pow!'        # сохранить строку с ключом 'Batman'
>>> file.keys()                    # получить список ключей в файле
[b'Batman']
>>> file['Batman']                 # извлечь значение по ключу 'Batman'
b'Pow!'
>>> who = ['Robin', 'Cat-woman', 'Joker']
>>> what = ['Bang!', 'Splat!', 'Wham!']
>>> for i in range(len(who)):
...     file[who[i]] = what[i]     # добавить еще 3 "записи"
...
>>> file.keys()
[b'Cat-woman', b'Batman', b'Joker', b'Robin']
>>> len(file), 'Robin' in file, file['Joker']
(4, True, b'Wham!')
>>> for key in file.keys(): print(key, file[key])
>>> for key in file: print(key.decode(), file[key].decode())
>>> file['Batman'] = 'Ka-Boom!' # изменить значение ключа Batman
>>> del file['Robin']            # удалить запись Robin
>>> file.close()                   # иногда требуется закрывать явно


упаковка объектов

pickle
>>> table = {'a': [1, 2, 3],
             'b': ['spam', 'eggs'],
             'c': {'name':'bob'}}
>>>
>>> import pickle
>>> mydb = open('dbase', 'wb')
>>> pickle.dump(table, mydb)

C:\...\PP4E\Dbase> python
>>> import pickle
>>> mydb = open('dbase', 'rb')
>>> table = pickle.load(mydb)
>>> table
{'a': [1, 2, 3], 'c': {'name': 'bob'}, 'b': ['spam', 'eggs']}


shelve
import shelve
dbase = shelve.open("mydbase")
dbase['key'] = object # сохранить объект
value = dbase['key'] # извлечь объект
len(dbase) # количество хранящихся элементов
dbase.keys() # список ключей хранящихся элементов


JSON
http://python-lab.ru/documentation/27/stdlib/json.html
https://pythonworld.ru/moduli/modul-json.html
Кодирование JSON
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'

Красивый вывод:
>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,
...                  indent=4, separators=(',', ': '))
{
    "4": 5,
    "6": 7
}

Декодироние JSON

>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

Использование json.tool из шелла для проверки и красивого вывода:
$ echo '{"json":"obj"}' | python -mjson.tool
{
    "json": "obj"
}


sqlite3
>>> import sqlite3
>>> conn = sqlite3.connect('dbase1') # при необходимости используйте полный путь к файлу
# мож­но пе­ре­дать спе­ци­аль­ную стро­ку «:memory:», что­бы соз­дать вре­мен­ную ба­зу дан­ных в па­мя­ти
>>> curs = conn.cursor()
>>> tblcmd = 'create table people (name char(30), job char(10), pay int(4))'
>>> curs.execute(tblcmd)
>>> curs.executemany('insert into people values (?, ?, ?)',
...          [ ('Sue', 'mus', '70000'),
...            ('Ann', 'mus', '60000')])
>>> rows = [['Tom', 'mgr', 100000],
...         ['Kim', 'adm', 30000],
...         ['pat', 'dev', 90000]]
>>> for row in rows:
...     curs.execute('insert into people values (? , ?, ?)', row)
...
>>> conn.commit() # сохранить изменения в базе
>>> curs.execute('select * from people') # выбрать записи
>>> curs.fetchall() # из­влечь записи
[('Bob', 'dev', 5000), ('Sue', 'mus', 70000), ('Ann', 'mus', 60000), ('Tom',
'mgr', 100000), ('Kim', 'adm', 30000), ('pat', 'dev', 90000)]

>>> for (name, job, pay) in curs.fetchall():
...     print(name, ':', pay)

>>> curs.execute('select * from people')
>>> colnames = [desc[0] for desc in curs.description]
>>> colnames
['name', 'job', 'pay']
>>> for row in curs.fetchall():
...     for name, value in zip(colnames, row):
...        print(name, '\t=>', value)
...    print()

>>> curs.execute('delete from people where name = ?', ['Bob'])
>>> curs.execute('delete from people where pay >= ?',(90000,))
>>> curs.execute('select * from people')
>>> curs.fetchall()
[('Sue', 'mus', 70000), ('Ann', 'mus', 65000), ('Kim', 'adm', 65000)]
>>> conn.commit()

>>> curs.execute('select * from people')
>>> colnames = [desc[0] for desc in curs.description]
>>> rowdicts = [dict(zip(colnames, row)) for row in curs.fetchall()]
>>> rowdicts[0]
{'pay': 70000, 'job': 'mus', 'name': 'Sue'}

>>> from sqlite3 import connect
>>> conn = connect('dbase1')
>>> curs = conn.cursor()
>>> curs.execute('delete from people')      # очистить таблицу
>>> curs.execute('select * from people')
>>> curs.fetchall()
[]
>>> file = open('data.txt')
>>> rows = [line.rstrip().split(',') for line in file]
>>> rows[0]
['bob', 'devel', '50000']

>>> curs.execute("select sum(pay), avg(pay) from people where job = 'devel'")
>>> curs.fetchall()
[(150000, 50000.0)]

http://www.internet-technologies.ru/articles/article_2190.html


records
>>> import records 
>>> db = records.Database('sqlite:///mydb.db') 
>>> 
>>> rows = db.query('SELECT * FROM cheese') 
>>> print(rows.dataset) 
name         |price 
-------------|----- 
red leicester|1.0 
wensleydale  |2.2 
>>> 
>>> print(rows.export('json')) 
[{"name": "red leicester", "price": 1.0}, {"name": "wensleydale", "price": 2.2}]

$ records 'SELECT * FROM cheese' yaml --url=sqlite:///mydb.db 
- {name: red leicester, price: 1.0} 
- {name: wensleydale, price: 2.2} 
$ records 'SELECT * FROM cheese' xlsx --url=sqlite:///mydb.db > cheeses.xlsx



Работа с архивами



создание архива
$ python3
>>> import shutil
>>> shutil.make_archive('/home/user/каталог/имя_архива', 'zip', '/home/user/path')

сделает архив содержимого каталога path и положит в указанном месте с указанным именем,
добавив расширение сжатия (zip), форматы сжатия zip gztar bztar xz

распаковка архива
$ python3
>>> import zipfile
>>> zipfile.ZipFile('/home/user/file.zip').extractall('/home/user/tmp/new')

распакует архив в папку new, папка будет создана, если её нет

или просто в консоли использовать модули python:
https://docs.python.org/3/library/tarfile.html

$ python3 -m tarfile -c $HOME/tmp/new_archiv.tar.bz2 $HOME/tmp/rt/ - создать архив
$ python3 -m tarfile -e $HOME/tmp/new_archiv.tar.bz2 $HOME/tmp/rt/1 - распаковать архив

аналогично для форматов tar.gz и tar.xz


Работа со строками



Строки. Функции и методы строк
Использование регулярных выражений в Python для новичков
41 вопрос о работе со строками в Python
в python3 достаточно просто присвоить строку
$ python3
>>> str='Самой используемой кодировкой в мире является utf8'
>>> str
'Самой используемой кодировкой в мире является utf8'

в python2 чуть больше телодвижений
$ python
>>> str=u'Самой используемой кодировкой в мире является utf8'
>>> print str
Самой используемой кодировкой в мире является utf8

Кодировки в python

Методы строк
str.find(substr)
Вы­пол­ня­ет по­иск под­стро­ки.
str.replace(old, new)
Вы­пол­ня­ет под­ста­нов­ку под­стро­ки.
str.split(delimiter)
Раз­би­ва­ет стро­ку по ука­зан­но­му раз­де­ли­те­лю или про­бель­ным сим­во­лам.
str.join(iterable)
Объ­еди­ня­ет под­стро­ки, встав­ляя раз­де­ли­те­ли ме­ж­ду ни­ми.
str.strip()
Уда­ля­ет ве­ду­щие и за­вер­шаю­щие про­бель­ные сим­во­лы.
str.rstrip()
Уда­ля­ет толь­ко за­вер­шаю­щие про­бель­ные сим­во­лы, ес­ли они име­ют­ся.
str.rjust(width)
Вы­рав­ни­ва­ет стро­ку по пра­во­му краю в по­ле фик­си­ро­ван­ной ши­ри­ны.
str.upper()
Пе­ре­во­дит все сим­во­лы в верх­ний ре­гистр.
str.isupper()
Про­ве­ря­ет – все ли сим­во­лы в стро­ке яв­ля­ют­ся сим­во­ла­ми верх­не­го ре­ги­ст­ра.
str.isdigit()
Про­ве­ря­ет – все ли сим­во­лы в стро­ке яв­ля­ют­ся циф­ра­ми.
str.endswith(substr-or-tuple)
Про­ве­ря­ет при­сут­ст­вие под­стро­ки (или од­но­го из ва­ри­ан­тов в кор­те­же) в кон­це дан­ной стро­ки.
str.startswith(substr-or-tuple)
Про­ве­ря­ет при­сут­ст­вие под­стро­ки (или од­но­го из ва­ри­ан­тов в кор­те­же) в на­ча­ле дан­ной стро­ки.


преобразование строк в кортеж, список и обратно
>>> 'spam eggs ham'.split()
['spam', 'eggs', 'ham']
>>> tuple(['spam', 'eggs', 'ham'])
('spam', 'eggs', 'ham')
>>> list(('spam', 'eggs', 'ham'))
['spam', 'eggs', 'ham']
>>> list('spam eggs ham')
['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm']
>>> ''.join(['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm'])
'spam eggs ham'
>>> '*'.join('spam eggs ham')
's*p*a*m* *e*g*g*s* *h*a*m'
>>> 's*p*a*m* *e*g*g*s* *h*a*m'.split('*')
['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm']
>>> ''.join(['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm'])
'spam eggs ham'

вредный совет
выпрямить вложенные списки с помощью функции sum()
>>> l=[['a', 'b', 'c'], ['1', '2'], ['#']]
>>> sum(l, [])
['a', 'b', 'c', '1', '2', '#']



столбик
типа 
perl -pa0e'$_=join",",@F' 1.txt > 2.txt
sed ':a;N;$!ba;s/\n/ /g' my.txt > my1.txt

>>> s="""
... Keujiuz8 
... ze5iiFee 
... chuF7hae 
... Quah8equ 
... UZiloh9A 
... quiWin0d 
... Fael9uo8 
... pheeph7M
... """
>>> s
'\nKeujiuz8 \nze5iiFee \nchuF7hae \nQuah8equ \nUZiloh9A \nquiWin0d \nFael9uo8 \npheeph7M\n'
>>> ' '.join(s.split())
'Keujiuz8 ze5iiFee chuF7hae Quah8equ UZiloh9A quiWin0d Fael9uo8 pheeph7M'

>>> d=s.split()
>>> for i in range(len(d)): print(d[i])
... 
Keujiuz8
ze5iiFee
chuF7hae
Quah8equ
UZiloh9A
quiWin0d
Fael9uo8
pheeph7M

>>> a=['sjdej', 'jsjjjsj', 'jdeechfeo']
>>> for i in a: print(i)
... 
sjdej
jsjjjsj
jdeechfeo

>>> for i in range(1,4): print ("abc"*i)
... 
abc
abcabc
abcabcabc

>>> for i in range(2, 22, 3): print('Номер ('+ str(i)+')')
... 
Номер (2)
Номер (5)
Номер (8)
Номер (11)
Номер (14)
Номер (17)
Номер (20)

>>> supplers = ['pens', 'staplers', 'binders']
>>> for i in range(len(supplers)):
...     print('Index ' + str(i) + ' in supplers is: ' + supplers[i])
... 
Index 0 in supplers is: pens
Index 1 in supplers is: staplers
Index 2 in supplers is: binders


регистр строки
>>> str='blablabla'
>>> str=str.upper()
>>> str
'BLABLABLA'
>>> str=str.lower()
>>> str
'blablabla'
>>> str=str.capitalize()
>>> str
'Blablabla'
>>> str=str.swapcase()
>>> str
'bLABLABLA'
>>> str=str.title()
>>> str
'Blablabla'
>>> 'bLABLABLA'.casefold()
'blablabla'


перевернуть строку
>>> a=list('habrahabr')
>>> a.reverse()
>>> ''.join(a)
'rbaharbah'

>>> 'hanrahabr'[::-1]
'rbaharnah'


Работа с ошибками
>>> import difflib 
>>> capitals = ('Montgomery', 'Juneau', 'Phoenix', 'Little Rock') 
>>> difflib.get_close_matches('Fenix', capitals) 
['Phoenix']


разные манипуляции
>>> 'spam eggs ham'[5:10]            # извлечение среза: подстрока
'eggs '
>>> 'spam ' + 'eggs ham'             # конкатенация (и *, len(), [ix])
'spam eggs ham'
>>> 'spam %s %s' % ('eggs', 'ham') # выражение форматирования: подстановка
'spam eggs ham'
>>> 'spam {} {}'.format('eggs', 'ham') # метод форматирования: альтернатива %
'spam eggs ham'
>>> 'spam = "%-5s", %+06d' % ('ham', 99) # более сложное форматирование
'spam = "ham ", +00099'
>>> 'spam = "{0:<5}", {1:+06}'.format('ham', 99)
'spam = "ham ", +00099'

>>> '-'.join([str(i) for i in range(10)])
'0-1-2-3-4-5-6-7-8-9'
>>> "bla {} blabl {} lala {}".format(1,2,3) 
'bla 1 blabl 2 lala 3'
>>> "bla {2} blabl {0:=10} lala {1}".format(1,2,3) 
'bla 3 blabl          1 lala 2'
>>> "bla   blabl  lala ".split()
['bla', 'blabl', 'lala']
>>> "blahblablhlala".split('h')
['bla', 'blabl', 'lala']
>>> "blahblablhlala".replace('a','z')
'blzhblzblhlzlz'
>>> '_'.join([str(i) for i in range(10)])
'0_1_2_3_4_5_6_7_8_9'

>>> y = {c.upper() * 4 for c in 'spamham'} # генератор множеств
>>> y
{'SSSS', 'AAAA', 'MMMM', 'HHHH', 'PPPP'}
>>>
>>> list(set([1, 2, 3, 1, 2]))             # удалит дубликаты из списка
[1, 2, 3]

>>> L = [{'n':3}, {'n':20}, {'n':0}, {'n':9}]
>>> L.sort(key=lambda x: x['n'])
>>> L
[{'n': 0}, {'n': 3}, {'n': 9}, {'n': 20}]

>>> L = [2, 4, 1, 3, 5]
>>> L.reverse()
>>> L
[5, 3, 1, 4, 2]
>>> L = [2, 4, 1, 3, 5]
>>> list(reversed(L))
[5, 3, 1, 4, 2]

>>> 'A B C D'.split()
['A', 'B', 'C', 'D']
>>> 'A+B+C+D'.split('+')
['A', 'B', 'C', 'D']
>>> '--'.join(['a', 'b', 'c'])
'a--b--c'

>>> 'aaa--bbb--ccc'.split('--')
['aaa', 'bbb', 'ccc']
>>> 'aaa--bbb--ccc'.replace('--', '...') 
'aaa...bbb...ccc' 

>>> x=[34,56]
>>> print((''.join(list(map(str,x)))),)
3456

удалить общие строки из двух списков

>>> a="abb bbb ccc eee".split()
>>> b="aab bbb ccd eee".split()
>>> aa=set(a)
>>> bb=set(b)
>>> c = bb.difference(aa)
>>> print(c)
{'aab', 'ccd'}

удаление повторяющихся в списке значений:

>>> nums = [1, 3, 2, 3, 1, 2, 3, 1, 2]
>>> unique_nums = list(set(nums))
>>> unique_nums
[1, 2, 3]



замена символов
Замена в строке с помощью Python

аналог sed 's/Windows/Linux/g'
>>> s='Windows Windows Windows'
>>> s.replace('Windows', 'Linux')
'Linux Linux Linux'

аналог sed -i 's/Windows/Linux/g' text
>>> old="Windows"
>>> new="Linux"
>>> text="Windows Windows Windows"
>>> import re
>>> print(re.sub(r'\bWindows\b', 'Linux', line))


бы­ст­ро за­ме­нить в фай­ле ка­ж­дый сим­вол та­бу­ля­ции че­тырь­мя точ­ка­ми
from sys import *
stdout.write(('.' * 4).join(stdin.read().split('\t'))) 

[a-zA-Z0-9_]+ со­от­вет­ст­ву­ет са­мой длин­ной стро­ке из од­но­го или бо­лее сим­во­лов букв, цифр или под­чер­ки­ва­ний. 
\w Лю­бой ал­фа­вит­но-циф­ро­вой сим­вол ([a-zA-Z0-9_] для ASCII)
[\t ]* со­от­вет­ст­ву­ет ну­лю или бо­лее та­бу­ля­ций и про­бе­лов        

>>> table = "".maketrans('12', '34', 'cs')
>>> '1212cs 5612cs cscs'.translate(table)
'3434 5634 '

>>> intab = "aeiou"
>>> outtab = "12345"
>>> trantab = str.maketrans(intab, outtab)
>>> str = "this is string example....wow!!!"
>>> print (str.translate(trantab))
th3s 3s str3ng 2x1mpl2....w4w!!!

strip() удаляет начальные и конечные пробелы
replace() удаляет все пробелы из строки
translate() избавиться от всех пробелов, а также от символов новой строки
" ".join(s.split()) избавиться от всех повторяющихся пробелов и символов новой строки
'строка'[1:] удалить первый символ строки

добавить символы в начало и конец строки
yourstring = "L{0}LL".format(yourstring) 
yourstring = ''.join(('L','yourstring','LL'))
yourstring = "L%sLL" % yourstring
yourstring = "L" + yourstring + "LL"

yourstring = '"'{0}'"'.format(yourstring) добавить кавычки в начало и конец строки



Очистка входных строковых данных
Полезные советы по Python, которых вы ещё не встречали
user_input = "This\nstring has\tsome whitespaces...\r\n"

character_map = {
 ord('\n') : ' ',
 ord('\t') : ' ',
 ord('\r') : None
}
user_input.translate(character_map)  # This string has some whitespaces... "


модуль re
аналог sed -i 's/Windows/Linux/g' text
>>> old="Windows"
>>> new="Linux"
>>> text="Windows Windows Windows"
>>> import re
>>> print(re.sub(r'\bWindows\b', 'Linux', line))

>>> import re
>>> re.split('--', 'aaa--bbb--ccc')
['aaa', 'bbb', 'ccc']
>>> re.sub('--', '...', 'aaa--bbb--ccc')    # случай с единственным разделителем
'aaa...bbb...ccc'
>>> re.split('--|==', 'aaa--bbb==ccc')      # разбить по -- или ==
['aaa', 'bbb', 'ccc']
>>> re.sub('--|==', '...', 'aaa--bbb==ccc') # заменить -- или ==
'aaa...bbb...ccc'
>>> re.split('[-=]', 'aaa-bbb=ccc')      # односимвольные альтернативы
['aaa', 'bbb', 'ccc']
>>> re.split('(--)|(==)', 'aaa--bbb==ccc')     # результат разбиения
['aaa', '--', None, 'bbb', None, '==', 'ccc'] # включает группы
>>> re.split('(?:--)|(?:==)', 'aaa--bbb==ccc') # часть выражения, не группы
['aaa', 'bbb', 'ccc']


использование обратного слэша
>>> a='Это не будет развернуто: \nновая строка'
>>> print(a)
Это не будет развернуто: 
новая строка
>>> a='Это не будет развернуто: \tновая строка'
>>> print(a)
Это не будет развернуто: 	новая строка
>>> a='Это не будет развернуто: \vновая строка'
>>> print(a)
Это не будет развернуто: 
                         новая строка
>>> a='Это не будет развернуто: \fновая строка'
>>> print(a)
Это не будет развернуто: 
                         новая строка
>>> a='Однажды Арнольд сказал: "I\'ll be back"'
>>> print(a)
Однажды Арнольд сказал: "I'll be back"


5 СПОСОБОВ ФОРМАТИРОВАНИЯ СТРОК
https://shultais.education/blog/python-f-strings

>>> name = "User"
>>> age = 100
>>> print("Меня зовут " + name + ". Мне " + str(age) + " лет.")
>>> Меня зовут User. Мне 100 лет.

>>> name = "User"
>>> age = 100
>>> print("Меня зовут %s. Мне %d лет." % (name, age))
>>> Меня зовут User. Мне 100 лет.
>>> print("Меня зовут %(name)s. Мне %(age)d лет." % {"name": name, "age": age})
>>> Меня зовут User. Мне 100 лет.

>>> from string import Template
>>> name = "User"
>>> age = 100
>>> s = Template('Меня зовут $name. Мне $age лет.')
>>> print(s.substitute(name=name, age=age))
>>> Меня зовут User. Мне 100 лет.

>>> name = "User"
>>> age = 100
>>> print("Меня зовут {}. Мне {} лет.".format(name, age)
>>> Меня зовут User. Мне 100 лет.
>>> print("Меня зовут {name} Мне {age} лет.".format(age=age, name=name)
>>> Меня зовут User. Мне 100 лет.

# начиная с Python 3.6
>>> name = "User" 
>>> age = 100
>>> print(f"Меня зовут {name} Мне {age} лет.")
>>> Меня зовут User. Мне 100 лет.


ПОГРУЖЕНЕ В F-СТРОКИ
>>> "обычная строка"
>>> f"f-строка"

f-строки также поддерживают расширенное форматирование чисел:
>>> from math import pi
>>> print(f"Значение числа pi: {pi:.2f}")
>>> Значение числа pi: 3.14

С помощью f-строк можно форматировать дату без вызова метода strftime():
>>> from datetime import datetime as dt
>>> now = dt.now()
>>> print(f"Текущее время {now:%d.%m.%Y %H:%M}")
>>> Текущее время 24.02.2017 15:51

Они поддерживают базовые арифметические операции. Да, прямо в строках:
>>> x = 10
>>> y = 5
>>> print(f"{x} x {y} / 2 = {x * y / 2}")
>>> 10 x 5 / 2 = 25.0

Позволяют обращаться к значениям списков по индексу:
>>> planets = ["Меркурий", "Венера", "Земля", "Марс"]
>>> print(f"Мы живим не планете {planets[2]}")
>>> Мы живим не планете Земля

А также к элементам словаря по ключу:
>>> planet = {"name": "Земля", "radius": 6378000}
>>> print(f"Планета {planet['name']}. Радиус {planet['radius']/1000} км.")
>>> Планета Земля. Радиус 6378.0 км. 

Причем вы можете использовать как строковые, так и числовые ключи. Точно также как в обычном Python коде:
>>> digits = {0: 'ноль', 'one': 'один'}
>>> print(f"0 - {digits[0]}, 1 - {digits['one']}")
>>> 0 - ноль, 1 - один

Вы можете вызывать в f-строках методы объектов:
>>> name = "User"
>>> print(f"Имя: {name.upper()}")
>>> Имя: User

А также вызывать функции:
>>> print(f"13 / 3 = {round(13/3)}")
>>> 13 / 3 = 4


zip + list

http://blog.lerner.co.il/implementing-zip-list-comprehensions/
>>> s = 'abc'
>>> t = (10, 20, 30)
>>> u = (-5, -10, -15)
>>> list(zip(s,t,u))
[('a', 10, -5), ('b', 20, -10), ('c', 30, -15)]
>>> [(s[i], t[i]) for i in range(len(s))] 
[('a', 10), ('b', 20), ('c', 30)]
>>> [(s[i], t[i]) for i in range(len(sorted((s,t), key=len)[0]))]
[('a', 10), ('b', 20), ('c', 30)]
>>> def shortest_sequence_range(*args):
...     return range(len(sorted(args, key=len)[0]))
... 
>>> [(s[i], t[i]) for i in shortest_sequence_range(s,t) ]
[('a', 10), ('b', 20), ('c', 30)]
>>> g = ((s[i], t[i]) for i in shortest_sequence_range(s,t) )
>>> for item in g: print(item)
... 
('a', 10)
('b', 20)
('c', 30)

>>> names = ['Tom', 'Dick', 'Harry']
>>> ages = [50, 35, 60]
>>> dict(zip(names, ages))
{'Harry': 60, 'Dick': 35, 'Tom': 50}



Работа с текстом




Сравнение содержания двух текстовых файлов
http://www.cyberforum.ru/python/thread1452346.html
http://aidalinux.ru/w/Grep
grep: коллекция примеров использования
вместо
grep -F -f 2.txt 1.txt > 3.txt (все совпадающие)
grep -Fv -f 2.txt 1.txt > 3.txt (разница)
grep -i -Fv -f 2.txt 1.txt > 3.txt (разница без учёта регистра)
pcregrep -vFf 2.txt 1.txt

эти точнее
diff --old-line-format=$'%l\n' --new-line-format='' --unchanged-line-format='' <(sort -u 2.txt) <(sort -u 1.txt)
comm -23 1.txt 2.txt
comm -13 <(sort -u 1.txt) <(sort -u 2.txt)|cat > output
Compare-Object (gc 1.txt) (gc 2.txt)  -PassThru


$ cat 1.txt
one two three four
$ cat 2.txt
two three one

вначале привести к одинаковому регистру 
типа
$ tr '[:upper:]' '[:lower:]'  lower.txt

Все буквы будут большими:
$ sed -i 's/.*/\U&/' 1.txt

Все буквы будут маленькими:
$ sed -i 's/.*/\L&/' 1.txt

>>> with open('1.txt', 'r',  encoding='utf-8-sig') as fileinput: fileinput.read().lower();

>>> data = [set(open(i).read().split()) for i in ('1.txt', '2.txt')]
>>> print(data[0].difference(data[1]))

nano diff_files1.py


python3 -m diff_files1


# запись
with open("filename.txt", "w") as file: file.write("hello world")

# чтение целиком
for line in open('filename.txt'): print(line)


# построчное чтение

for line in open('filename.txt').xreadlines(): print(line)
# в python2x

for line in open('filename.txt').readlines(): print(line, end='') # в python3x

B = 'spamspamspam'
open('savetree.txt', 'w').write(str(B))
# Сохранить в файл для последующего просмотра
open('latindata', 'w', encoding='latin-1').write(B) # Запись в latin-1
open('utf8data', 'w', encoding='utf-8').write(B) # Запись в utf-8
open('latindata', 'r', encoding='latin-1').read() # Декодирование выполняется при чтении
open('utf8data', 'r', encoding='utf-8').read() # в соответствии с названием кодировки
open('latindata', 'rb').read() # Прочитать двоичные данные


import pysed
print(pysed.replace("очень очень много букв", 'о', '!!!!'))
http://rtfm.co.ua/python-modul-pysed-rasshirennyj-analog-redaktora-sed/
https://pypi.python.org/pypi/pysed

правильное чтение



найти слово в тексте
https://pynative.com/python-search-for-a-string-in-text-files/



транслитерация

pip install transliterate
>>> from transliterate import translit
>>> print(translit(u"всякий разный текст", 'ru', reversed=True))



Кодировки



# -*- coding: utf-8 -*-
или
# coding: utf8

import sys
sys.getdefaultencoding() # Кодировка по умолчанию
import encodings.aliases
list(encodings.aliases.aliases)
print(encodings.aliases.aliases)
import encodings.aliases
arr = encodings.aliases.aliases
keys = list(arr.keys())
keys.sort() 
for key in keys: 
    print("%s => %s"% (key, arr[key]))

>>> from encodings.aliases import aliases
>>> def find(q):
...     return [(k,v) for k, v in aliases.items() if q in k or q in v]
...
>>> find('1252') # multiple aliases
[('1252', 'cp1252'), ('windows_1252', 'cp1252')]
>>> find('koi')
[('cskoi8r', 'koi8_r')]
>>> a=find('')
>>> a.sort()
>>> print(a)
[большой список]

import pkgutil
import encodings
false_positives = set(["aliases"])
found = set(name for imp, name, ispkg in pkgutil.iter_modules(encodings.__path__) if not ispkg)
found.difference_update(false_positives)
print(found)

>>> import chardet
>>> s = '\xe2\x98\x83' # ☃
>>> chardet.detect(s)
{'confidence': 0.505, 'encoding': 'utf-8'}

from encodings.aliases import aliases
print aliases.keys()

import os
import encodings
os.listdir(os.path.dirname(encodings.__file__))

https://docs.python.org/3/library/codecs.html#standard-encodings
https://docs.python.org/3/library/codecs.html#python-specific-encodings
http://stackoverflow.com/questions/1728376/get-a-list-of-all-the-encodings-python-can-encode-to


Ше­ст­на­дца­терич­ное зна­че­ние ко­да ASCII



>>> hex(ord('&'))
'0x26'
>>> hex(ord('+'))
'0x2b'


развернуть

https://github.com/rothgar/awesome-tuis

посмотреть видео
mplayer -vo fbdev2 -zoom -x 1024 -y 600 -fs /адрес/имя_файла.avi
mpv -vo drm rtmp://сайт_с_раздачей/
mpv -vo drm http://78.29.1.71/live/2x2tv/copy/playlist.m3u8

youtube-dl https://www.youtube.com/watch?v=6pxRHBw-k8M --list-formats
mpv -vo drm https://www.youtube.com/watch?v=6pxRHBw-k8M --ytdl-format=22
echo "mpv -vo drm https://www.youtube.com/watch?v=6pxRHBw-k8M --ytdl-format=22" > /dev/tty2

ссылки на видео

ffplay film.avi

https://help.ubuntu.ru/wiki/ffmpeg
запись в файл
ffmpeg -f fbdev -r 10 -i /dev/fb0 out.avi



скачать потоковое видео
ffmpeg -i https://example.org/stream.m3u8 -c copy out.ts

записать и прослушать аудио
arecord audio.wav
aplay audio.wav

прослушать радио
curseradio
mpg123 http://strm112.1.fm/90s_mobile_mp3
mocp http://ic2.101.ru:8000/a183
ffplay http://ic2.101.ru:8000/a70
mpv http://strm112.1.fm/ccountry_mobile_mp3

ссылки на радио

музон в консоли
в ubuntu и debian
sudo apt-get install pulseaudio
sudo apt-get install libpulse-dev
sudo apt-get install osspd
wget -qO - http://radio.goha.ru:8000/grindfm.ogg |ffmpeg -i - -f u8 -ac 1 -ar 8000 -> /dev/dsp

sudo apt-get install sox libsox-fmt-all
wget -qO - http://radio.goha.ru:8000/grindfm.ogg |play -t ogg -

во фряхе
# virtual_oss -S -Q 0 -b 16 -c 2 -r 44100 -s 100ms -f /dev/dsp -d dsp.44100 -t vdsp.ctl
% fetch -o - http://radio.goha.ru:8000/grindfm.ogg |oggdec -R -e 1 -b 16 -s 1 - -o - > /dev/dsp.44100
http://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=post&om=118115&forum=vsluhforumID3&omm=24&news_key=51258


посмотреть картинку
fim -A /адрес/имя_файла.png

прочесть pdf
fimgs /адрес/имя_файла.pdf
jfbview /адрес/имя_файла.pdf

pip3 install epy-reader
epy книга.mobi

интернет с картинками
w3m адрес_сайта
пакет w3m-img должен быть установлен
links2 -g адрес_сайта
apt install netsurf-fb

прочесть документы
antiword file.doc | less
odt2txt file.odt | less

глянуть погоду
curl http://wttr.in/

посмотреть звёздные войны
telnet towel.blinkenlights.nl
когда надоест Ctrl + ] и затем q

интернет
w3m elinks links2 chawan
https://github.com/browsh-org/browsh
docker run --rm -it browsh/browsh
https://github.com/fathyb/carbonyl
docker run -ti fathyb/carbonyl https://duckduckgo.com


скриншоты в иксах и консоли, запись терминальной сессии, разрешение экрана в tty
fbset -xres 1280 -yres 1024 -depth 32
fbset -xres 1920 -yres 1080 -depth 32
fbset -xres 1600 -yres 900 -depth 32

fbgrab -c 2 2.png #(снимок tty2)
sudo fbgrab -c 2 -s 5 2.png # снимок tty2 через 5 сек

tlog-rec --writer=file --file-path=tlog.log
tlog-play --reader=file --file-path=tlog.log

получить ссылки и картинки с сайта
http://www.videlibri.de/xidel.html
адреса ссылок:
xidel -s --extract "//a/@href" "http://www.videlibri.de/xidel.html"
адреса изображений:
xidel -s --extract "//img/@src" "http://www.videlibri.de/xidel.html"

локаль
echo 'export LANG=en_US.utf8' >> ~/.profile
source ~/.profile

QT во фреймбуфере
sudo gpasswd -a пользователь input # права на мышку и клаву для qt
QT_QPA_PLATFORM=linuxfb программа_на_qt # запуск qt программ, в tty
QT_QPA_PLATFORM=linuxfb qutebrowser https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png
в этом режиме работают только хоткеи программы, переключения на другую tty нет

Как закрыть терминал без убийства запущенной в нём команды
nohup команда &
или
команда & disown

строка bash
Поднятая целина: Осваиваем и обустраиваем консоль — «Хакер»
Разноцветные терминалы
командная строка в стиле DOS
Пользовательские настройки Bash

export PS1='\t C:\> '

или так
export PS1="C:\$( pwd | sed 's:/:\\\\\:g' )> "

если понравилось добавим в ~/.bashrc следующий код:
PS1="C:\$( pwd | sed 's:/:\\\\\:g' )> "

цветной текст
echo -e '\033[0;31mнекоторый текст\033[0m'

опции
Ёлочка в командной строке

0 Сбросить все атрибуты
1 Bright (повышенная яркость)
2 Dim (затемнение)
4 Underscore (нижнее подчеркивание)
5 Blink (мигание)
7 Reverse (инверсия)
8 Hidden (скрыть текст)

Foreground Colours (цвет пера, этим цветом выводится текст):
30 Black (черный)
31 Red (красный)
32 Green (зеленый)
33 Yellow (желтый)
34 Blue (синий)
35 Magenta (пурпурный)
36 Cyan (голубой)
37 White (белый)

Background Colours (цвет бумаги, или цвет фона):
40 Black (черный)
41 Red (красный)
42 Green (зеленый)
43 Yellow (желтый)
44 Blue (синий)
45 Magenta (пурпурный)
46 Cyan (голубой)
47 White (белый)



привет в соседнюю консоль
простой:
echo "Привет" > /dev/tty2

посложнее:
Файл дескриптор в Linux с примерами

откроем консоль с bash и посмотрим PID нашего процесса
[user@localhost ]$ echo $$
15771
Во второй консоли запустим
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user 0 Oct 7 15:42 .
dr-xr-xr-x 9 user user 0 Oct 7 15:42 ..
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21

Файл дескриптор с номером 255 можете смело игнорировать в рамках данной статьи, он был открыт для своих нужд уже самим bash, а не прилинкованной библиотекой.

Сейчас все 3 файл дескриптора связаны с устройством псевдотерминала /dev/pts, но мы все равно можем ими манипулировать, например запустим во второй консоли

[user@localhost ]$ echo "hello world" > /proc/15771/fd/0

И в первой консоли мы увидим

[user@localhost ]$ hello world

strace -s 1024 -f bash -c "ls | grep hello"


для подключения к pty следует использовать клиент ttysnoop
ttysnoop /dev/pts/0
tty -s && echo "Внутри tty"

netcat чат меж компами

tmux
https://wiki.archlinux.org/index.php/Tmux_(Русский)
Краткая шпаргалка по tmux (менеджеру терминалов)
Tmux — что это и зачем? Обзор и урок tmux
GNU Screen и tmux: ключ к эффективному использованию консоли
Шпаргалка по работе с Tmux (терминальный мультиплексор)
Поддержка мышки в Midnight Commander запущенного из под tmux/screen

небольшой конфигурационный файл:
$ vi ~/.tmux.conf




для старой версии tmux




vi ~/.profile




$ tmux source-file ~/.tmux.conf
кратко
для подключения обратно используется другой аргумент командной строки:
$ tmux attach

для перехода к предыдущему окну следует использовать следующую команду:
$ tmux last-window

А для создания окна такую:
$ tmux new-window

Весь перечень поддерживаемых команд можно получить так:
$ tmux list-commands

Получить список всех возможных опций можно так:
$ tmux show-options
$ tmux show-window-options

Очень хороший способ запустить tmux:
tmux attach || tmux new — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.
tmux new -s session1 - создание сессии с именем session1
tmux attach -t session1 - подключение к сессии session1
tmux a -t session1
Ctrl+b s Выбрать сессию
tmux kill-session -t session1 - Завершение сессии

После этого вы попадаете в полноценную консоль.
Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)

В одной сессии может быть сколько угодно окошек:
Ctrl+b c — создать окошко;
Ctrl+b 0...9 — перейти в такое-то окошко;
Ctrl+b p — перейти в предыдущее окошко;
Ctrl+b n — перейти в следующее окошко;
Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее);
Ctrl+b & — закрыть окошко (а можно просто набрать exit в терминале).

В одном окошке может быть много панелей:
Ctrl+b % — разделить текущую панель на две, по вертикали;
Ctrl+b " — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2);
Ctrl+b →←↑↓ — переходить между панелями;
Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).

Недостаток — непривычным становится скроллинг:
Ctrl+b PgUp — вход в «режим копирования», после чего:
PgUp, PgDown — скроллинг;
q — выход из «режима копирования».

работа с tmux
Старт
# tmux //без параметров будет создана сессия 0
# tmux new -s session1 //новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.

Префикс (с него начинаются команды)
<C-b> (CTRL + b)

Новое окно (нажать CTRL+b, затем нажать с)
<C-b c>

Список окон
<C-b w> // переключиться курсором вверх-вниз

Переключение
<C-b n> // следующее окно
<C-b p> // предыдущее окно
<C-b 0> // переключиться на номер окна

Окна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.

Деление окна горизонтально
<C-b ">
либо команда
# tmux split-window -h

Деление окна вертикально
<C-b %>
либо команда
# tmux split-window -v

Переход между панелей
<C-b стрелки курсора> // либо режим мыши

Изменение размеров панелей
<C-b c-стрелки> // либо режим мыши

Закрытие окон
<C-b x> // нужно подтвердить y
либо
# exit

Отключение от сессии
<C-b d>
либо
# tmux detach

Список сессий
# tmux ls

Подключиться к работающей сессии
# tmux attach //подключение к сессии, либо к единственной, либо последней созданной
# tmux attach -t session1 // подключение к сессии session1

Выбрать сессию
<C-b s>

Завершение сессии
# tmux kill-session -t session1

Завершить все сессии
# tmux kill-server

Список поддерживаемых комманд
# tmux list-commands

Дополнительная информация
# man tmux

GNU Screen
https://www.gnu.org/software/screen/manual/screen.html
https://wiki.archlinux.org/title/GNU_Screen_(Русский)
Краткая шпаргалка по использованию GNU screen

Стандартные команды
ctrl+a ? Отображает список команд и их параметры по умолчанию
ctrl+a : Ввод команды для screen
ctrl+a " Список окон
ctrl+a 0 Открыть окно 0
ctrl+a A Переименовать текущее окно
ctrl+a a Отправить ctrl+a в текущее окно
ctrl+a c Создать новое окно
ctrl+a S Разделить текущий регион на два по горизонтали
Ctrl+a | Разделить текущий регион на два по вертикали
ctrl+a tab Переключить фокус ввода на следующий регион
ctrl+a ctrl+a Переключение между текущим и предыдущим регионами
ctrl+a Esc Перейти в режим копирования (используйте enter для выделения текста)
ctrl+a ] Вставка текста
ctrl+a Q Закрыть все регионы кроме текущего
ctrl+a X Закрыть текущий регион
ctrl+a d Отключиться от текущего сеанса screen, оставив его работающим в фоне. Для переподключения используйте screen -r

Вводимые команды
Ctrl+a :quit Закрывает все окна и завершает сеанс screen
Ctrl+a :source ~/.screenrc Перезагружает файл настроек screenrc (также можно использовать /etc/screenrc)

Создание сеанса с определённым названием:
$ screen -S название_сеанса

Переименование текущего сеанса:
Ctrl+a :sessionname название_сеанса

Список всех существующих сеансов текущего пользователя:
$ screen -list

Подключение к существующему сеансу по его имени:
$ screen -x название_сеанса
или
$ screen -r название_сеанса

Ctrl+a a d Отсоединяется от внутреннего сеанса screen.
Ctrl+a a K Завершает (kill) внутренний сеанс screen.

Основные хоткеи в screen следующие.Основные хоткеи в screen следующие.
Окна:

Ctr + A, C	Create, создать окно
Ctr + A, K	Kill, прибить окно
Ctr + A, W	Windows, показать список окон
Ctr + A, Space	Переключитьcя на следующее окно
Ctr + A, N	То же самое
Ctr + A, Backspace	Переключиться на предыдущее окно
Ctr + A, P	То же самое
Ctr + A, Ctr + A	Вернутся на окно, с которого переключились
Ctr + A, "	Выбрать из списка окно, на которое хотим переключиться
Ctr + A, 0-9	Переключиться на окно с таким-то номером
Ctr + A, ‘	Ввести номер окна, на которое хотим переключиться
Ctr + A, Shift + A	Переименовать окно
Ctr + A, :number 3	Изменить номер окна
Ctr + A, I	Info, информация о текущем окне
Ctr + A, Shift + N	Number, номер и название текущего окна
 

Регионы:

Ctr + A, Shift + S	Разделить текущий регион горизонтально
Ctr + A, |	Разделить текущий регион вертикально
Ctr + A, :resize +5	Изменить размер региона вертикально (увеличить на 5)
Ctr + A, :resize -h 80	Изменить размер региона горизонтально (установить в 80)
Ctr + A, Tab	Переключение между регионами
Ctr + A, Shift + X	Прибить текущий регион
Ctr + A, Shift + Q	Прибить все регионы кроме текущего
 

Мониторинг:

Ctr + A, Shift + M	Включить/выключить мониторинг активности в окне
Сек + A, _	Мониторинг неактивности в течение 30 секунд
 

Скролинг и копирование текста:

Ctr + A, [	Перейти в режим copy/scrollback
Ctr + A, ]	Вставить содержимое paste buffer (регистр . — «точка»)
Ctr + A, >	Записать paste buffer во временный файл (bufferfile)
Ctr + A, <	Считать paste buffer из временного файла
Ctr + A, =	Удалить bufferfile
Ctr + A, :bufferfile	Изменить имя bufferfile (нужно передать аргумент)
Ctr + A, :readreg a	Положить paste buffer в регистр a
Ctr + A, :paste a	Вставить содержимое регистра a

Разное:

Ctr + A, ?	Подсказка по хоткеям
Ctr + A, D	Detach
Ctr + A, \	Прибить все окна и выйти
Ctr + A, A	Послать Ctr + A
Ctr + A, T	Time, показать текущее время, имя хоста, LA
Ctr + A, V	Version, показать версию screen
Ctr + A, X	Lock, для разблакировки нужно ввести пароль пользователя
Ctr + A, F	Fit, подогнать окно под размер текущего региона
Ctr + A, Z	Как Ctr+Z для обычных приложений




Текстовые WM (wm в tty)
Viper Window Manager (VWM) — это легкий, расширяемый оконный менеджер для консоли.
http://vwm.sourceforge.net/index.html

Monotty Desktopio Текстовая среда рабочего стола внутри вашего терминала
https://github.com/netxs-group/vtm

Twin - это оконная среда с поддержкой мыши, оконным менеджером, эмулятором терминала и сетевыми клиентами, все внутри текстового дисплея.
https://github.com/cosmos72/twin

file manager
https://midnight-commander.org/
https://github.com/elfmz/far2l
https://github.com/gokcehan/lf
https://github.com/GiorgosXou/TUIFIManager
https://inigo.katxi.org/devel/lfm/
https://github.com/radiopushka/tfiles
https://github.com/jarun/nnn
https://github.com/ranger/ranger
https://github.com/sxyazi/yazi
https://github.com/vifm
https://github.com/yorukot/superfile
https://github.com/sayanarijit/xplr


сделать интерфейс
https://tui.studio/
https://github.com/jalonsogo/tui-studio
https://opentui.com/
https://github.com/anomalyco/opentui

фреймбуфер вместо иксов
https://directfb2.github.io/
https://github.com/directfb2

разница между DE и WM, а также работа в голых иксах
установка XRDP, VNC и SSH на Ubuntu и Debian. (tmux)
почта в консоли mutt и msmtp
делаем vim удобным
Редактируем iso в Ubuntu Linux из консоли
Копирование Audio CD
проверка скорости интернета в консоли
Профиты от использования консольного FTP-клиент lftp
UTF в консоли FreeBSD

консольная подборка
консоль python в роли командной строки

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 17th, 2026 06:22 pm
Powered by Dreamwidth Studios