set isql="C:\\Program Files(x86)\\FireBird\\FireBird_2_1\\BIN\\isql.exe"
echo ^
SELECT C.CODE AS "Табельный", C.NAME AS "Ф.И.О.", T.TRANZDATE AS "Дата", max(T.TRANZTIME) AS "Время", T.INFOSTR AS "Карта" sum(T.SUMM) AS "Сумма" FROM DOCUMENT D LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID JOIN CLIENT C ON D.CLIENTID = C.ID WHERE T.TRANZDATE = cast('now' as date) and D.STATE = 1 AND D.ISFISCAL = 1 AND D.CLIENTID >=0 AND T.TRANZTYPE = '36' GROUP BY C.CODE, C.NAME, T.TRANZDATE, T.INFOSTR; ^
| %isql% 127.0.0.1/3050:E:\Torgovlya54\MAIN.GDB sysdba masterkey > outputfile.txtfrom urllib.parse import urlparse
from bs4 import BeautifulSoup
import requests
import lxml
DOMAIN = 'apexair.ru'
HOST = 'http://' + DOMAIN
FORBIDDEN_PREFIXES = ['#', 'tel:', 'mailto:']
links = set() # множество всех ссылок
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(HOST, headers=headers)
# print(response.content)
def add_all_links_recursive(url, maxdepth=1):
# print('{:>5}'.format(len(links)), url[len(HOST):])
# глубина рекурсии не более `maxdepth`
# список ссылок, от которых в конце мы рекурсивно запустимся
links_to_handle_recursive = []
# получаем html код страницы
request = requests.get(url, headers=headers)
# парсим его с помощью BeautifulSoup
soup = BeautifulSoup(request.content, 'lxml')
# рассматриваем все теги <a>
for tag_a in soup.find_all('a', href=lambda v: v is not None):
link = tag_a['href']
# если ссылка не начинается с одного из запрещённых префиксов
if all(not link.startswith(prefix) for prefix in FORBIDDEN_PREFIXES):
# проверяем, является ли ссылка относительной
# например, `/oplata` --- это относительная ссылка
# `http://101-rosa.ru/oplata` --- это абсолютная ссылка
if link.startswith('/') and not link.startswith('//'):
# преобразуем относительную ссылку в абсолютную
link = HOST + link
# проверяем, что ссылка ведёт на нужный домен
# и что мы ещё не обрабатывали такую ссылку
if urlparse(link).netloc == DOMAIN and link not in links:
links.add(link)
links_to_handle_recursive.append(link)
if maxdepth > 0:
for link in links_to_handle_recursive:
add_all_links_recursive(link, maxdepth=maxdepth - 1)
def main():
add_all_links_recursive(HOST + '/')
for link in links:
print(link)
if __name__ == '__main__':
main() data=[
['дата', '1', '2', '3', '4', '5', '6', '7', ...],
['Ноябрь 2019', '11', '22', '33', '44', '55', '66', '77', ...],
['Декабрь 2019', '11', '22', '33', '44', '55', '66', '77', ...],
...
]import datetime
import locale
def replace_month(dt: str) -> str:
dt = dt.replace('Январь', 'января')
dt = dt.replace('Февраль', 'февраля')
# ...
return dt
locale.setlocale(locale.LC_TIME, "ru_RU.utf8")
head = data[0]
data = data[1:]
result_rows = []
for row in data:
for day, value in zip(head[1:], row[1:]):
dt = replace_month(f'{day} {row[0]}')
try:
dt = datetime.datetime.strptime(dt, '%d %B %Y')
except ValueError:
pass # тут у нас дата не сконвертнулась, например, 30 февраля. Пофиг.
else:
result_rows.append((dt, value))module = importlib.import_module('my_module_name')
classes = [
value
for value in (
getattr(module, name)
for name in dir(module)
)
if isinstance(value, type)
and getattr(value, '__module__', None) == module.__name__
] data['custom_answer'] равно тому, что вы привели в качестве примера (хотя закрывающую фигурную скобку забыли), то код сработает верно и без ошибок."string indices must be integers"
In [1]: 'qwerty'['xxx']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-994fc1ca7c86> in <module>
----> 1 'qwerty'['xxx']
TypeError: string indices must be integersВот такой массив передаю в 'custom_answer'
Теперь мне нужно результат получить и "забрать".
def task_v1():
"""
Принимает на вход строки (признак конца ввода - пустая строка),
сохраняет их в список без повторений.
Печатает сохранённые в списке строки.
"""
lst = [] # делаем пустой список
s = input() # вводим первую строку
while s: # пока введённая строка не пуста:
if s not in lst: # если строка не в списке:
lst.append(s) # добавляем её
s = input() # принимаем следующую строку
print('\n'.join(lst)) # объединяем все строки через абзац и печатаем
def task_v2():
"""
Также принимает на вход строки, но сохраняет их в Счётчик.
Счётчик и порядок добавления запоминает и считает количество повторов.
Печатает ключи счётчика.
"""
from collections import Counter # импортируем класс счётчика
c = Counter() # создаём экземпляр Счётчика
s = input() # вводим первую строку
while s: # пока введённая строка не пуста:
c[s] += 1 # подсчитываем её счётчиком
s = input() # принимаем следующую строку
print('\n'.join(c)) # объединяем ключи счётчика через абзац и печатаем
def task_v3():
"""
То же, что и v2, но в функциональном стиле
"""
from collections import Counter # импортируем класс счётчика
print( # функция печати, которой даём строку...
'\n'.join( # которую формируем объединяя через абзац элементы (строки) полученные...
Counter( # созданием экземпляра счётчика, которому в конструктор передаём...
iter(input, '') # итератор, который будет вызывать функцию input пока она не вернёт '',
# а результаты всех вызовов (кроме последнего) будет возвращать по мере
# запроса их конструктором Счётчика (для подсчёта)
).keys() # и формированием списка уникальных ключей (строк) из счётчика.
# ктсати `.keys()` совершенно не нужен. Итаратор по счётчику возвращает ключи.
)
)
def task_v3_1():
"""В одну строку это выглядит не так ужасно:"""
print('\n'.join(Counter(iter(input, ''))))
def task_v4():
"""
То же, что и v3, но расписано на этапы и сохранено в промежуточные переменные
"""
from collections import Counter # импортируем класс счётчика
it = iter(input, '') # создаём итератор, который по мере запроса у него
# очередных значений будет вызывать функцию
# input пока она не вернёт пустую строку
c = Counter(it) # создаём экземпляр Счётчика и в качестве аргумента
# даём ему наш итератор. тем самым мы предлагаем
# нашему новому счётчику запросить все значения,
# что отдаст итератор и посчитать количество
# вхождений каждой уникальной строки
unic = c.keys() # получаем у счётчика его ключи, то есть все
# уникальные строки, которые он считал.
# Приятный побочный эффект, доступный в современном
# Питоне - это сохранение порядка ключей по мере ввода.
# Этот шаг не обязателен, поскольку счётчик итерируется по ключам.
result_text = '\n'.join(unic) # объединяем все уникальные строки через абзац. Вместо unic можно просто указать `c`.
print(result_text) # и печатаем их$ py "set(iter(input,''))"$ cat<<""|py -l "set(l)"$ cat<<""|py -l "collections.Counter(l)"py "collections.Counter(iter(input, ''))"