@python_beginnersЭта группа больше не существует

Страница 765 из 1885
Igor
15.11.2016
08:16:26
мне просто понять для себя, что если я использую виртуальную среду, то я в нее должен отдельно устанавливать базу данных и т.п
погоди погоди. "базу данных" как файл или как сервер субд? это ты хуйню сказал. библиотеку/модуль для работы с базами данных? это уже норм.

Dmitry
15.11.2016
08:16:31
Прям уроборос
в моем случае, это скорее "самоотсос"

Igor
15.11.2016
08:17:16
В словаре лежат регулярки+символы, которые надо вывести

Google
Igor
15.11.2016
08:17:16
Циклом по словарю долго

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

Roman
15.11.2016
08:17:50
погоди погоди. "базу данных" как файл или как сервер субд? это ты хуйню сказал. библиотеку/модуль для работы с базами данных? это уже норм.
ну смотри, я сейчас поставил фласк в обычную среду (так скажем), там у меня все запустилось и т.п

Igor
15.11.2016
08:18:58
ну смотри, я сейчас поставил фласк в обычную среду (так скажем), там у меня все запустилось и т.п
ну и?) virtualenv позволяет изолировать окружение. окружение - это лишь сам python и всякие его сторонние библиотечки (типа того же flask'а, sqlalchemy..)

15.11.2016
08:19:04
Igor
15.11.2016
08:19:26
больше ничего не изолируется, из-под virtualenv доступны все файлы, что и для системного питона, все сетевые ресурсы, и прочее дерьмо

virtualenv - это просто отдельный независимый питончик со своими отдельными независимыми зависимостями (гыгыг)

и все, что ты будешь делать в этом окружении, никак не повлияет на другие virtualenvы или проекты все, что ты будешь делать в системном питончике, тоже не должно повлиять (но это в теории, конечно. по факту все что угодно сломать можно)

Темный
15.11.2016
08:20:47
докер кто-то юзал для проектов?

профиты есть? или венва достаточно?

Igor
15.11.2016
08:21:31
ну че за вопрос ( докер вообще для другого немножко

53r63rn4r
15.11.2016
08:21:40
Ну да, докер для другого

Igor
15.11.2016
08:21:44
профиты есть, венва может быть достаточно, все зависит от ситуации

Google
53r63rn4r
15.11.2016
08:21:51
Я юзал докер, мне девопс поднимал для проекта

Albatrosicks
15.11.2016
08:21:52
а регулярки здесь причем, я так и не понял
К определенной регулярке относится ссылка, ид, текст, в общем контент Надо вернуть его Сейчас все это работает циклом по словарю и если re.search возвращает True, функция возвращает текст

И парсер логов тоже неплохо было бы узнать с:

Igor
15.11.2016
08:23:30
что значит неплохо было бы узнать((( ну вон в первой же выдаче в гугле пример парсера логов апача http://statmodeling.com/regular-expression-for-apache-log-parsing.html можно переделать под nginx

Igor
15.11.2016
08:24:38
ну парсь кастомный

Albatrosicks
15.11.2016
08:24:48
Его же не геморно переделывать?

Igor
15.11.2016
08:24:50
регулярки - это опыт и только опыт )

кого?

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

они ж нечитаемые почти всегда, блеать

Dmitry
15.11.2016
08:25:22
нет, он о лог-парсере

Albatrosicks
15.11.2016
08:25:32
регулярки - это опыт и только опыт )
Я с ними все лето "развлекался"

Dmitry
15.11.2016
08:25:59
блин, у меня дежавю, разговор о логах и регулярках уже был.

Igor
15.11.2016
08:26:14
та какая разница, все равно весь парсинг сводится к тому, что надо написать регулярку, и надо написать что-нибудь, что будет брать исходные данные, скармливать регулярке и на выходе получать нужные данные

Albatrosicks
15.11.2016
08:26:50
У меня проблема исключительно в кормежке

Кормлю я обычно список строк списку регулярок и выходит достаточно долго

Igor
15.11.2016
08:28:19
строки в списке - они разного формата что ли?

зачем несколько регулярок на одной строке проверять?

Google
Albatrosicks
15.11.2016
08:29:31
строки в списке - они разного формата что ли?
Ну как, пол лога такое, пол лога другое, потом еще треть рандомная мета хрень

Igor
15.11.2016
08:31:11
а не проще одной регуляркой?

ну или я правда не понял

в смысле - пол-лога одно, пол-лога другое? обычно у лога один и тот же формат в пределах одного файла

In [18]: import re In [19]: msg = '[11:27] <user> this is my message' In [20]: result = re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg) In [21]: result.groups() Out[21]: ('11:27', 'user', 'this is my message') вот те самый простой парсер ))

Albatrosicks
15.11.2016
08:32:43
ну или я правда не понял
Конечно не понял, я сначало спросил по одной задаче, потом логи подвернулись В общем, с логами я понял, а сейчас мне надо кучу разных строк по разным регуляркам проверить

Igor
15.11.2016
08:33:30
ну, не вижу ничего плохого в том, чтобы делать приблизительно так, как ты описал но я бы все равно сделал это одной регуляркой, мне кажется, ты хочешь странного есть пример разных записей в логе?

Igor
15.11.2016
08:36:06
как ты читаешь лог вообще? если ты берешь 100 мегабайтный файл и делаешь по всему его содержимому re.search/re.match или че там ты делаешь, то неудивительно, что все работает медленно

итерируйся по одной строчке, ну по нескольким, на худой конец

Zart
15.11.2016
08:38:12
итерируйся по одной строчке, ну по нескольким, на худой конец
прекрасный совет о том как убить скорость в хуй

Albatrosicks
15.11.2016
08:38:26
там 200кб максимум, просто приходится довольно часто лезть в лог

Zart
15.11.2016
08:41:18
если хочется парсить логи быстро, лучше читать блоками и регэкспить переводы строк самому, чем давать это делать либцу

но это не для новичков 8)

Albatrosicks
15.11.2016
08:42:26
Ок, как регэкспить самому?

Pavel
15.11.2016
08:43:01
А ещё регекспы на больших строках работает быстрее, чем много раз на маленьких.

Albatrosicks
15.11.2016
08:43:13
Так, для интереса, в лучшем случае вектор развития сменится(появится)

Pavel
15.11.2016
08:43:28
>>> timeit.timeit("re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)", "import re; msg='[11:27] <user> this is my message'") 2.223340862663062 >>> timeit.timeit("re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)", "import re; msg='[11:27] <user> this is my message'*5") 2.49057301739302 >>> timeit.timeit("re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)", "import re; msg='[11:27] <user> this is my message'*50") 3.8385056942973144 >>> timeit.timeit("re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)", "import re; msg='[11:27] <user> this is my message'*500") 17.536126503448884

Google
Pavel
15.11.2016
08:44:27
Обратие внимание на рост длины строки в моём сообщении (*500 в конце выражения) и рост времени обработки

53r63rn4r
15.11.2016
08:45:31
И как объяснить?

Zart
15.11.2016
08:47:48
э

D:\>py -mtimeit -s "import re; msg='[11:27] <user> this is my message'" "re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)" 1000000 loops, best of 3: 1.4 usec per loop D:\>py -mtimeit -s "import re; msg='[11:27] <user> this is my message'*500" "re.match(r'\[(\d{1,2}:\d{1,2})\] <(\w+)> (.+)', msg)" 10000 loops, best of 3: 47.4 usec per loop на строке длиннее в 500 раз скорость просела не в 500, а гдето в 30-40 раз

И как объяснить?
больше доля выполнения сишного чем питонового кода

53r63rn4r
15.11.2016
08:49:56
Прикольно

Igor
15.11.2016
08:51:16
ништяк, спасибо о_О

Admin
ERROR: S client not available

Vadim
15.11.2016
10:20:51
Господа, а скомпильте регэксп для начала. Пожалуйста :)

Roman
15.11.2016
10:21:57
>>> from flask import Flask, url_for >>> app = Flask(__name__) >>> @app.route('/') ... def index(): pass ... >>> @app.route('/login') ... def login(): pass ... >>> @app.route('/user/<username>') ... def profile(username): pass ... >>> with app.test_request_context(): ... print url_for('index') IndentationError: expected an indented block >>> with app.test_request_context(): ... print url_for('index') File "<stdin>", line 2 print url_for('index') ^ IndentationError: expected an indented block >>> with app.test_request_context(): ... print(url_for('index') File "<stdin>", line 2 print(url_for('index') ^

Не могу понять почему валится

Vadim
15.11.2016
10:22:09
Если мы говорим о парсинге логов или, например, таблицы товаров интернет-магазина, то у нас там (допустим) 500 строк и 10 регулярок, которые компилятся до первого прохода. Интересно узнать разницу в скорости.

Igor
15.11.2016
10:22:19
with app.test_request_context()

Vadim
15.11.2016
10:22:24
Не могу понять почему валится
Тебе же написали: «expected an indented block»

Igor
15.11.2016
10:22:25
всего один пробел, разве не нужно как минимум два?

Vadim
15.11.2016
10:22:56
Roman
15.11.2016
10:28:11
>>> with app.test_request_context(): ... print(url_for('index')) ... print(url_for('login')) ... print(url_for('login', next='/') ... print(url_for('profile', username = 'John Doe')) File "<stdin>", line 5 print(url_for('profile', username = 'John Doe'))

Google
Roman
15.11.2016
10:32:49
теперь тут затыкается

Igor
15.11.2016
10:34:17
а трейсбек

хотя не нужен

print(url_for('login', next='/'))

не хватает скобки

Roman
15.11.2016
10:38:37
у меня горит со своей невнимательности, я несколько раз пробежал глазами код

и не заметил

Alexey
15.11.2016
10:49:19
Доброго времени суток.

Eva
15.11.2016
10:52:03
как на питоне сгенерить 128 битное рандомное число?

чтобы именно 128-битное

Alexey
15.11.2016
10:52:22
Имеется вопрос, что-то как-то не могу понять один момент. Пользователь вводит число. Нужно понять сколько цифр в числе и вывести по цифре, как к примеру здесь: nums = input("input some number: ") for i in nums: print(i) Но, соль в том, что надо работать именно с числом, а не со строкой. Думаю, надо разбить число на простые цифры, типо 123 = 1*10^2 + 2*10 +3. Но дальше как-то не придумал)) Натолкните на мысль, пожалуйста

Artem
15.11.2016
10:56:01
чтобы именно 128-битное
»> import uuid »> uuid.uuid4().int 293276174114937334338145142636771874162 ?

Eva
15.11.2016
10:56:32
Artem
15.11.2016
10:57:53
по крайней мере в документации написано, что UUID.int The UUID as a 128-bit integer.

Eva
15.11.2016
11:02:34
вроде получилось) пасибочки еще раз)

Johnnie
15.11.2016
11:04:28
divmod
чем лучше?

Igor
15.11.2016
11:06:07
возвращает сразу пару, не надо две отдельные операции делать по одному и тому же числу

не?

Страница 765 из 1885

Эта группа больше не существует Эта группа больше не существует