# типы данных. Они могут быть классами, или описаниями вида typing.Tuple[int, str]
# так как ты не описал типы данных, я пишу тут заглушки typing.Any (т.е. что угодно)
# эти типы лучше описать в отдельном файле, который будет импортироваться остальными
Snaphot = typing.Any
PreparedSnapshot = typing.Any
SnapshotResult = typing.Any
# функции обработки. они могу быть раскиданы по отдельным файлам,
# но они должны импортить нужные модули, в т.ч. описание типов данных
# ни одна функция не должна выбрасывать исключения
def get_snapshot(site: str, name: str) -> typing.Optional[Snapshot]:
"Качает один снапшот с сайта и возвращает его, или None если была ошибка."
...
def prepare_snapshot(snapshot: Snapshot) -> typing.Optional[PreparedSnapshot]:
"Подготавливает один снапшот к обработке. Возвращает None при ошибке."
...
def process_prepared_snapshot(snapshot: PreparedSnapshot) -> typing.Optional[SnapshotResult]:
"Извлекает нужные сведения из одного снапшота и возвращает их как структуру данных, или None при неудаче."
...
# эта функция будет в главном запускаемом файле
# главный файл должен импортировать остальные
targets = zip(...) # ну или как ты там делаешь список
# и вот тут уже главный цикл
# вариант А - классический цикл
results: typing.List[SnapshotResult] = []
for site, name in targets:
snap = get_snapshot(site, name)
if snap is not None:
prepared = prepare_snapshot(snap)
if prepared is not None:
result = process_prepared_snapshot(prepared)
if result is not None:
results.append(result)
# вариант Б - более функциональный подход
# фильтрует коллекцию, отбрасывает None
def skipNone(items):
return filter(lambda item: item is not None, items)
results: typing.List[SnapshotResult] = list(skipNone(
map(process_prepared_snapshot, skipNone(
map(prepare_snapshot, skipNone(
get_snapshot(site, name) for site, name in targets
))
))
))
# в любом случае, у тебя есть список результатов results, делай с ним что хочешь.
aList = "http://сайт-со-снепшотами.com"
bList = ['список', 'имен', 'для', 'снепшотов', 'и', 'так', 'далее']
for a, b in zip(aList, bList):
('h', 'список'), ('t', 'имен'), ('t', 'для'), ('p', 'снепшотов'), (':', 'и'), ('/', 'так'), ('/', 'далее'), ...
def process_dict(d: dict):
pass # тут работаешь с этим словарём
# рекурсивный вызов для вложенных словарей
subresults = [process_dict(subdict) for subdict in d['subCategories']]
pass # тут объединяешь результаты от вложенных словарей с основным результатом
return ... # обязательно возвращаешь результат
Не так, переменная меняется не присвоением ей значения, а за счет парсинга с сайта
old_value = None
while True:
new_value = parse_site() # parse_site() - написанная тобой функция, которая возвращает искомое значение
if old_value is not None and new_value != old_value: # если это не первый раз, и значение изменилось
print('Значение изменилось!')
old_value = new_value # чтобы в следующий раз сравнивать с последним увиденным значением
time.sleep(600) # спим 10 минут, чтобы не долбить сайт запросами
slovar[username] = {"Name":name}
slovar[username] = {"Familia":familia}
slovar[username] = {"Data":ddmmyy}
slovar[username] = {"Nomer":nomer}
slovar[username] = {
"Name":name, # инглиш
"Familia":familia, # рунглиш
"Data":ddmmyy, # рунглиш
"Nomer":nomer, # рунглиш
}
dialogue = dict() # обычный питоновский словарь
# datasource - коллекция строк. Но данные можно читать и построчно из файла
# with open('text.txt', 'rt') as datasource:
datasource = """mom - Hello, do you need anything in the shop?
brother - Yes, bring some fruits
dad - And beer
mom - okey
dad - thx
brother - thx
""".split()
for line in datasource:
actor, _, text = line.split(' - ') # разбиваем строку на две части
if _ is not None: # нашли разделитель, действуем
# если нужного ключа не было, создать его с указанным значением,
# (в нашем случае с новым пустым списком) и вернуть это значение
# а если ключ был, то просто вернуть его значение
actor_lines = dialogue.setdefault(actor.lower(), [])
actor_lines.append(text)
print(dialogue)
from collections import defaultdict
# если у словаря спрашивают неизвестный ключ, он по-тихому
# поместит по этому ключу пустой список, и отдаст этот список
# этот словарь будет хранить результат
dialogue = defaultdict(list) # list - фабрика новых значений
# datasource - коллекция строк. Но данные можно читать и построчно из файла
# with open('text.txt', 'rt') as datasource:
datasource = """mom - Hello, do you need anything in the shop?
brother - Yes, bring some fruits
dad - And beer
mom - okey
dad - thx
brother - thx
""".split()
for line in datasource:
actor, _, text = line.split(' - ') # разбиваем строку на две части
if _ is not None: # нашли разделитель, действуем
# если нужного значения ключа не было, defaultdict сам создаст запрошенный ключ
# так что мы гарантированно получим список
dialogue[actor.lower()].append(text)
print(dialogue)
txt = List_1[0]
txt = # тут твой код
List_1[0] = txt
# файл a.py
def putin():
c = 'punctuati'
c = c * 2
print(c)
# файл b.py
from a import putin
putin()
encoding=eng
лишнее. У тебя код закодировал строку в utf-8 при создании объекта bytes(), так что она оказалась уже дважды закодирована.strange_string = '"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"'
bstring = bytes(ord(c) for c in strange_string) # конструируем строку байт побайтово, из кодов символов в строке
result = bstring.decode('utf-8')
print(result)
cv2_inwrite(/content/2 (1).jpeg, im)
class Test:
a: list = []
Test.a
тоже даст [3]. class Test:
def __init__(self): # конструктор
self.a: list = []
a b b a b a a ....
A b b a b a a ....
a B b a b a a ....
a B a b a a ....
a b A b a a ....
def add_time(self, h: int = 0, m: int = 0, d: int = 0, dw: int = 0, mh: int = 0, y: int = 0):
if any(v < 0 for v in [h,m,d,dw,mh,y]):
raise ValueError()
args = {'h':h, 'm':m, 'd':d, 'dw':dw, 'mh':mh, 'y':y}
bad = list(filter(lambda k: args[k] < 0, args.keys()))
if bad:
raise ValueError('Invalid values for: ' + ','.join(bad))
import functools
import inspect
# пусть чек-функция имеет вид (value) -> bool, и возвращает True для "хороших" значений. Пример:
def not_whitespace(s: str) -> bool:
'String must not contain only whitespace' # док строка будет использоваться в сообщении об ошибке
return bool(s.strip()) # проверяем что строка не состоит из одних пробелов.
# чек-функции можно генерировать и на ходу:
def in_range(low, high):
def check(value):
return (low is None or low <= value) and (high is None or value <= high)
check.__doc__ = f'Value must be between {low} and {high}.'
return check
# теперь сделаем декоратор, который умеет принимать чек-функции и применять их перед вызовом цели
def check(**checks):
def wrapper(func):
sign = inspect.signature(func)
names = list(sign.parameters.keys()) # имена параметров по порядку
not_found = set(checks.keys()) - set(names) # все ли чеки ссылаются на известные параметры?
if not_found:
# у нас есть чек на неизвестный параметр!
raise NameError(', '.join(not_found))
# всё ок, делаем обёртку над функцией
@functools.wraps(func)
def wrapped(*args, **kwargs):
bad = []
for param_name, check_func in checks.items():
idx = names.index(param_name)
if idx < len(args):
# параметр был передан через args
value = args[idx]
if not check_func(value): # вызываем чек-функцию
err = getattr(check_func, '__doc__', '')
if err:
bad.append(f'{param_name} ({err})')
else:
bad.append(param_name)
else:
pass # могут быть хитрости с kwargs-only параметрами. Тут уж извини, мне влом писать.
if bad: # нашли ошибки?
raise ValueError('Bad value for parameters: '+', '.join(bad))
# тут ещё можно помудрить над скрытием последнего фрейма в traceback, но мне опять влом
else: # не нашли, вызываем функцию
return func(*args, **kwargs)
return wrapped
return wrapper
# пример использования
# строка должна быть не из одних пробелов
# число должно быть в пределах от 1 до 10 включительно
@check(s=not_whitespace, n=in_range(1, 10))
def repeat(s: str, n: int) -> str:
return s * n
print(repeat('test ', 3))
try:
print(repeat('test ', 20))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat('test ', -1))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat(' ', 5))
except ValueError as err:
print('yep! it failed!', err)
try:
print(repeat(' ', 15))
except ValueError as err:
print('yep! it failed!', err)