Найти - Пользователи
Полная версия: помогите пожалуйста пишет ошибку в def shuffle(self): но исправление не помогает
Начало » Python для новичков » помогите пожалуйста пишет ошибку в def shuffle(self): но исправление не помогает
1 2
py.user.next
Ne_znay_ka
а для Linux и чтобы на нем работать мне 50 гб хватит?
Лучше выдели 60Gb и сделай всю файловую систему монолитной (точек /boot и прочих отдельно не должно быть). Хранилища для тяжёлых файлов будешь подключать в директорию /mnt через файл /etc/fstab. Эти хранилища можно создавать и подключать прямо при загруженной системе уже после установки. В итоге у тебя при загрузке компьютера должен появляться загрузчик GRUB и там должен быть выбор, загрузить Windows или загрузить Linux, и больше ничего. Потом загрузишься в Linux и станешь её оснащать через установщик программ. Я в Windows по полгода не бываю, не нужна она вообще. А игры у меня и в Linux есть. В Dota 2 я играл уже через Steam и в Counter Strike по сети тоже. Также в Age of Empires и даже в Super Mario на эмуляторе восьмибитной приставки. Также играл в Silent Hill на эмуляторе Sony PlayStation. Всё это в Linux можно делать, короче.
xam1816
py.user.next
У тебя какой дистрибутив?
py.user.next
xam1816
У тебя какой дистрибутив?
Fedora уже лет десять.
Ne_znay_ka
py.user.next
скачал Linux. Подскажите какая программа для сравнения кодов.
py.user.next
Ne_znay_ka
скачал Linux. Подскажите какая программа для сравнения кодов.
Тут же написано. Программа diff. А в Linux нет расширений .exe у программ. Все программы лежат там в директории /usr/bin и других подобных директориях (/bin, /sbin, /usr/sbin, /usr/local/bin). Но можно и свою директорию подключить со своими программами и скриптами.

Программой ls можно просмотреть директорию.
ls /usr/bin

Вот у меня скрипты лежат в своей скриптовой директории ~/.env/scripts
Я её сам сделал, чтобы бэкапить свои скрипты быстро, чтобы не искать их по всем директориям.
[guest@localhost ~]$ ls ~/.env/scripts/
mplt.sh pl_build_install.sh pl_build_test.sh pl_test.sh rusmail-bandana.sh
mp.py pl_build_reinstall.sh pl_general.sh pl_uninstall.sh rusmail-x.sh
mulptch.sh pl_build.sh pl_install.sh pml_load.sh
[guest@localhost ~]$

Вот там скрипт для слежения за посылкой почтовой rusmail-x.sh
Я его сделал наскоряк (у него даже репозитория нет и версии), чтобы он ходил и проверял посылку. Заказал посылку, она идёт по городам, но лежит там по несколько суток. Если город сменился там на странице, скрипт создаёт файл на рабочем столе мне. Я в этот файл заглядываю и вижу три последние точки, которые посылка прошла. Так я в курсе событий и мне не надо ничего проверять ходить.
[guest@localhost ~]$ cat ~/.env/scripts/rusmail-x.sh 
#!/bin/bash

check_track_number()
{
local barcode="x"
local fname_config="/usr/local/etc/rusmail-x.conf"
local fname_report="$HOME/Desktop/rusmail-x"
local oldhash newhash
local text

oldhash=`cat "$fname_config"`
text=`rusmail.sh check "$barcode"`
[ $? -eq 0 ] || return 1
newhash=`echo "$text" | md5sum | awk '{print $1}'`
[ "$oldhash" != "$newhash" ] && {
echo "$text" | head -3 > "$fname_report"
echo "$newhash" > "$fname_config"
}
return 0
}

main()
{
check_track_number || return 1
echo "Ok"
return 0
}

main "$@" || exit 1
exit 0
[guest@localhost ~]$
Так вот этот скрипт просто работает с рабочим столом только. Но проверку он выполняет с помощью программы, которая помассивнее немного. Программа rusmail.sh .

Мы запускаем программу which, чтобы узнать, где лежит моя программа rusmail.sh
[guest@localhost ~]$ which rusmail.sh
/usr/local/bin/rusmail.sh
[guest@localhost ~]$
Видим, что она лежит в директории /usr/local/bin

Читаем её
[guest@localhost ~]$ cat /usr/local/bin/rusmail.sh
#!/bin/bash

# rusmail v0.0.1
# Checks tracking information for barcode on https://pochta.ru
# Copyright (C) 2022 py.user.next mail@mail

progname=`basename $0`

# Print an error message to stderr
# error(str)
error()
{
echo "error: $progname: $1" >&2
}

# Print an message to stdout
# msg(str)
msg()
{
echo "$progname: $1"
}

# Print program usage to stderr
# usage()
usage()
{
echo "usage: $progname check barcode " >&2
}

check()
{
local barcode="$1"
local data

data=`load_data "$barcode"`
[ $? -eq 0 ] || return 1
echo "$data" | filter_data
[ $? -eq 0 ] || return 1
return 0
}

load_data()
{
local barcode="$1"
local url="https://www.pochta.ru/tracking?p_p_id=trackingPortlet_WAR_portalportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=tracking.get-by-barcodes&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_count=1"

curl -s -X POST --data "barcodes=$barcode" "$url" || return 1
return 0

}

filter_data()
{
python3 -c '
import sys
import json
import re

def format_date(text):
pat = r"^(.{4})-(.{2})-(.{2})T(.{2}):(.{2}):(.{2}).{4}(.{6})$"
parts = re.search(pat, text).groups()
parts_sorted = (parts[2], format_month(parts[1]),
parts[0], parts[3], parts[4], parts[6])
out = "{} {} {} {}:{} {}".format(*parts_sorted)
return out

def format_month(text):
dct = {
"01": "Янв",
"02": "Фев",
"03": "Мар",
"04": "Апр",
"05": "Мая",
"06": "Июн",
"07": "Июл",
"08": "Авг",
"09": "Сен",
"10": "Окт",
"11": "Ноя",
"12": "Дек"
}
out = dct[text]
return out

def format_city(text):
if text is not None:
out = text
else:
out = "Неопр"
return out

def main():
doc = json.loads(sys.stdin.read())
track_lst = doc["response"][0]["trackingItem"]["trackingHistoryItemList"]
track_res = []
for point in track_lst:
date = format_date(point["date"])
index = point["index"]
city = format_city(point["cityName"])
status = point["humanStatus"]
trackresfmt = "{} [{} {:20}] {}"
track_res.append(trackresfmt.format(date, index, city, status))
out = "\n".join(track_res)
print(out)

try:
main()
except KeyError as exc:
print("error: " + str(exc))
sys.exit(1)
' || return 1
return 0
}

main()
{
case $# in
0|1) usage; return 1;;
2)
if [ "$1" = "check" ]; then
check "$2" || return 1
else
error "invalid command: $1"
return 1
fi
;;
*) error "unknown arglist: \"$*\""; return 1;;
esac
}

main "$@" || exit 1

exit 0
[guest@localhost ~]$
Тут уже строк побольше и даже версия есть. Эту я целых три часа писал, наверное. Она и делает всю основную работу по добыванию содержимого со страницы Почты России. Там есть API ещё у почтового сайта, но API мне не нужен. Настоящее мастерство - это работа без API (замещение живого человека).

Так вот в этой программе скрипт написан на Shell (встроенный язык в командную оболочку Linux, которому тоже уже несколько десятков лет). А в скрипте на Shell внутри вставлен скрипт на Python без какого либо файла. Это как по принципу, когда в программу на языке C вставляются вставки на языке Assembler.

Вот так она работает (штрихкод какой-то нашёл на Яндекс-картинках)
[guest@localhost ~]$ rusmail.sh 
usage: rusmail.sh check barcode
[guest@localhost ~]$
[guest@localhost ~]$ rusmail.sh check 11172005104871
09 Янв 2017 11:03 +03:00 [105005 Москва ] Получено отправителем
05 Янв 2017 08:10 +03:00 [105005 Москва ] Прибыло в место вручения
03 Янв 2017 01:16 +03:00 [111981 Москва ] Покинуло сортировочный центр
01 Янв 2017 22:20 +03:00 [140980 Львовский ] Покинуло сортировочный центр
01 Янв 2017 16:37 +03:00 [140983 Львовский ] Сортировка
30 Дек 2016 09:42 +04:00 [443960 Самара ] Покинуло сортировочный центр
28 Дек 2016 10:23 +04:00 [443028 Мехзавод ] Выслано обратно отправителю
30 Ноя 2016 09:47 +04:00 [443028 Мехзавод ] Неудачная попытка вручения
28 Ноя 2016 13:29 +04:00 [443028 Мехзавод ] Прибыло в место вручения
28 Ноя 2016 06:08 +04:00 [443960 Самара ] Покинуло сортировочный центр
27 Ноя 2016 10:38 +04:00 [443960 Самара ] Прибыло в сортировочный центр
26 Ноя 2016 07:50 +03:00 [140980 Львовский ] Покинуло сортировочный центр
25 Ноя 2016 19:17 +03:00 [140983 Львовский ] Сортировка
23 Ноя 2016 20:04 +03:00 [111537 Москва ] Покинуло место приема
23 Ноя 2016 14:51 +03:00 [111726 Неопр ] Принято в отделении связи
[guest@localhost ~]$

Ещё пример (штрихкод какой-то нашёл на Яндекс-картинках)
[guest@localhost ~]$ rusmail.sh check 39790202014043
08 Янв 2019 15:58 +10:00 [690089 Владивосток ] Получено адресатом
03 Янв 2019 18:27 +10:00 [690089 Владивосток ] Прибыло в место вручения
03 Янв 2019 08:16 +10:00 [690960 Владивосток ] Покинуло сортировочный центр
01 Янв 2019 15:08 +10:00 [690960 Владивосток ] Сортировка
01 Янв 2019 13:58 +10:00 [690960 Владивосток ] Прибыло в сортировочный центр
22 Дек 2018 23:10 +03:00 [102000 Москва ] Покинуло сортировочный центр
22 Дек 2018 22:05 +03:00 [102004 Москва ] Сортировка
22 Дек 2018 17:52 +03:00 [102000 Москва ] Прибыло в сортировочный центр
22 Дек 2018 14:20 +03:00 [102150 Москва ] Покинуло сортировочный центр
22 Дек 2018 05:40 +03:00 [102152 Москва ] Сортировка
22 Дек 2018 05:40 +03:00 [102150 Москва ] Прибыло в сортировочный центр
21 Дек 2018 14:36 +03:00 [394960 Воронеж ] Покинуло сортировочный центр
20 Дек 2018 10:47 +03:00 [394963 Воронеж ] Сортировка
20 Дек 2018 10:47 +03:00 [394960 Воронеж ] Прибыло в сортировочный центр
19 Дек 2018 20:36 +03:00 [397979 Лиски ] Покинуло сортировочный центр
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Сортировка
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Прибыло в сортировочный центр
19 Дек 2018 19:33 +03:00 [397902 Лиски ] Покинуло место приема
19 Дек 2018 12:52 +03:00 [397902 Лиски ] Принято в отделении связи
[guest@localhost ~]$

Ну и, соответственно, можно их в цикле запустить
[guest@localhost ~]$ for i in 11172005104871 39790202014043; do echo "Посылка"; rusmail.sh check $i; done
Посылка
09 Янв 2017 11:03 +03:00 [105005 Москва ] Получено отправителем
05 Янв 2017 08:10 +03:00 [105005 Москва ] Прибыло в место вручения
03 Янв 2017 01:16 +03:00 [111981 Москва ] Покинуло сортировочный центр
01 Янв 2017 22:20 +03:00 [140980 Львовский ] Покинуло сортировочный центр
01 Янв 2017 16:37 +03:00 [140983 Львовский ] Сортировка
30 Дек 2016 09:42 +04:00 [443960 Самара ] Покинуло сортировочный центр
28 Дек 2016 10:23 +04:00 [443028 Мехзавод ] Выслано обратно отправителю
30 Ноя 2016 09:47 +04:00 [443028 Мехзавод ] Неудачная попытка вручения
28 Ноя 2016 13:29 +04:00 [443028 Мехзавод ] Прибыло в место вручения
28 Ноя 2016 06:08 +04:00 [443960 Самара ] Покинуло сортировочный центр
27 Ноя 2016 10:38 +04:00 [443960 Самара ] Прибыло в сортировочный центр
26 Ноя 2016 07:50 +03:00 [140980 Львовский ] Покинуло сортировочный центр
25 Ноя 2016 19:17 +03:00 [140983 Львовский ] Сортировка
23 Ноя 2016 20:04 +03:00 [111537 Москва ] Покинуло место приема
23 Ноя 2016 14:51 +03:00 [111726 Неопр ] Принято в отделении связи
Посылка
08 Янв 2019 15:58 +10:00 [690089 Владивосток ] Получено адресатом
03 Янв 2019 18:27 +10:00 [690089 Владивосток ] Прибыло в место вручения
03 Янв 2019 08:16 +10:00 [690960 Владивосток ] Покинуло сортировочный центр
01 Янв 2019 15:08 +10:00 [690960 Владивосток ] Сортировка
01 Янв 2019 13:58 +10:00 [690960 Владивосток ] Прибыло в сортировочный центр
22 Дек 2018 23:10 +03:00 [102000 Москва ] Покинуло сортировочный центр
22 Дек 2018 22:05 +03:00 [102004 Москва ] Сортировка
22 Дек 2018 17:52 +03:00 [102000 Москва ] Прибыло в сортировочный центр
22 Дек 2018 14:20 +03:00 [102150 Москва ] Покинуло сортировочный центр
22 Дек 2018 05:40 +03:00 [102152 Москва ] Сортировка
22 Дек 2018 05:40 +03:00 [102150 Москва ] Прибыло в сортировочный центр
21 Дек 2018 14:36 +03:00 [394960 Воронеж ] Покинуло сортировочный центр
20 Дек 2018 10:47 +03:00 [394963 Воронеж ] Сортировка
20 Дек 2018 10:47 +03:00 [394960 Воронеж ] Прибыло в сортировочный центр
19 Дек 2018 20:36 +03:00 [397979 Лиски ] Покинуло сортировочный центр
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Сортировка
19 Дек 2018 20:10 +03:00 [397979 Лиски ] Прибыло в сортировочный центр
19 Дек 2018 19:33 +03:00 [397902 Лиски ] Покинуло место приема
19 Дек 2018 12:52 +03:00 [397902 Лиски ] Принято в отделении связи
[guest@localhost ~]$
Потому что когда у тебя скрипт, ты можешь его встраивать в другие скрипты. Это я тебе показываю разницу между тем, как сидеть это и на сайте вручную смотреть через браузер, и между тем, как это смотреть скриптом через консоль. Это похоже на одно и то же, но это не одно и то же. На сайте ты сотню посылок не просмотришь руками, а через скрипт ты можешь просто подать сотню номеров и не только это просмотреть глазами (всё, что он выкачает), но и просто это взять и перенаправить в текстовый файл, чтобы просмотреть это потом по частям (или пустить этот файл уже в другую программу, которая вместо тебя его просмотрит и выберет оттуда всё, что надо).

Короче, это два скрипта. Один скрипт запускается по расписанию каждый час и кладёт на рабочий стол файл, если это надо (если там что-то изменилось), а в этот файл пишет только необходимую информацию (последние три точки, в которых была посылка). Второй скрипт выполняет саму процедуру добывания этой информации с сайта; он не знает ни про какой рабочий стол, ни про какое планирование. Во втором скрипте вставлен в виде текста третий скрипт, который выполняет раскалывание JSON-данных с сайта и их форматирование для чтения человеком. Эти два скрипта, которые в файлах своих лежат, работают в паре (такая спарка). Вот эта спарка у меня следит за каждой из посылок. Мне не нужно какое-то там приложение в смартфоне запускать, проверять его каждый день и думать “а не поменялось ли там что-нибудь? а посылка дальше пошла или так и лежит там где-нибудь?”. Вот я их написал часа за три, подключил, всё проверил, что всё работает и что в случае ошибок тоже всё работает. И теперь я практически не пользуюсь этим приложением в смартфоне от Почты России, потому что оно мне резко стало не нужно. И на сайт Почты России я тоже не хожу. Я просто знаю, где посылка, и я уверен, что как только она придёт, я сразу об этом узнаю. Потому что мои скрипты - я их сам писал, я знаю, как они работают, - никто не может поменять.

Короче, вот это пример скриптов в Linux. В Windows ты такое не сделаешь. Там якобы есть то, якобы есть это, но это всё нихуя не работает. Ты убьёшь несколько дней на просто разработку, а потом поймёшь, что оно нихуя не работает вообще. То есть ты убьёшь время впустую. Очень печально становится в такие моменты. В Linux'е же, наоборот, ты будешь получать одно удовольствие, потому что разработка идёт быстро, при этом ты всё можешь набросать (запретных тем нет), а работает оно потом месяцами и ты думаёшь “блять, я эту прогу даже не дописал, а она приносит пользу уже хуй знает сколько времени”. Вот она разница.

Так что не надо пользоваться Windows, если ты хочешь программировать.
Ne_znay_ka
py.user.next
огромное спасибо буду разбираться
delitet
Ne_znay_ka
можно не париться и использовать любой онлайн сервис для сравнения текстов
По запросу “сравнить тексты онлайн” в гугле выбирай любой
py.user.next
delitet
можно не париться и использовать любой онлайн сервис для сравнения текстов
Ну, попробуй, сравни тысячу файлов в дереве каталогов, которые располагаются на разной глубине; потом расскажешь, как ты через буфер копировал изменения и сохранял их в текстовые файлы полдня. В Linux'е ты можешь любую программу подключить к любой процедуре. Одна процедура проходит по дереву каталогов, другая процедура выполняет сравнение файлов, и эти процедуры можно объединить в одну, чтобы это происходило синхронно. На всё про всё уйдёт одна секунда и в файле отчёта будет лежать готовый результат в каком-нибудь html-документе, который удобно в браузере просматривать.

delitet
По запросу “сравнить тексты онлайн” в гугле выбирай любой
У тебя виндовое мышление. А в виндовом мышлении у тебя никогда ничего нет и поэтому тебе нужны сервисы из Интернета. А в линуксовом мышлении у тебя всегда всё есть и поэтому никакие сервисы никогда и не нужны, у тебя всё в компьютере вот прямо здесь прямо перед глазами.

Так что не будь бухгалтершой. Будь программистом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB