gentoo.ru
python
python@conference.gentoo.ru
Пятница, 2 сентября 2011< ^ >
krigstask установил(а) тему: ЯП Python || https://gist.github.com/289467 || Логи: http://tinyurl.com/gentoo-py-logs || "Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck." || Вышел IPython 0.11!
Конфигурация комнаты
Участники комнаты

GMT+4
[00:19:42] maksbotan вышел(а) из комнаты
[08:12:30] LK4D4 вышел(а) из комнаты
[10:34:14] pimiento вошёл(а) в комнату
[10:35:13] <pimiento> Доброго всем всего. Что-то не пойму я в вашем питоне: pyc никакой не вижу, а изменение в скрипте не приводит к изменению в вызове программы. Чего я не знаю?
[10:49:00] <lk4d4> большая программа?
[10:49:07] <lk4d4> как запускаешь?
[10:50:26] <pimiento> маленькая - тестирование optparse
[10:50:45] <lk4d4> показывай
[10:50:47] <pimiento> ./unicode.py - а там шебанг #!/usr/bin/env python
[10:50:57] <lk4d4> вообще сейчас модно argparse
[10:51:19] <pimiento> по ТЗ надо optparse
[10:51:36] <lk4d4> ну показывай и скажи в чем конкретно проблема
[10:52:23] <pimiento> http://paste.pocoo.org/raw/468774/
[10:52:49] <pimiento> проблема в том, что после редактирвания usage - вывод не поменялся
[10:54:25] <lk4d4> ха, а куда ты его передал-то?
[10:54:34] <lk4d4> откуда опшнпарсер о нем узнает?
[10:55:12] <pimiento> Эм, в мануале это как-то не описывается. /me полагал что он просто хапает значение этой переменной
[10:55:24] <lk4d4> да ну, это вообще свинство было бы
[10:55:54] <pimiento> http://docs.python.org/library/optparse.html#generating-help
[10:56:03] <lk4d4> usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
[10:56:13] <lk4d4> вот я прям из library reference взял
[10:56:21] <pimiento> а у меня как?
[10:56:41] <pimiento> аааааа! ох тыж
[10:56:41] <lk4d4> usage = "Usage: %prog --from-code NAME --to-code NAME [-c]"
parser = OptionParser()
[10:56:45] <lk4d4> хехе
[10:56:51] <lk4d4> ну как работа кстати?
[10:56:53] <pimiento> вот я слепой :)
[10:56:54] <lk4d4> радует?
[10:57:17] <pimiento> 19 туда выйду, вот пока обучают 5(
[10:57:19] <pimiento> :)
[10:57:33] <lk4d4> блин, у меня прям *ЗАВИСТЬ* :D
[10:58:24] <pimiento> ну там джанго больше, чем питон, но это не веб-девелоперы, а хостеры и бывают другие задачи
[10:58:53] <pimiento> вот если до 19 успею подучиться, то сразу на 30 возьмут, иначе ещё доучивать будут за 15
[10:59:07] <lk4d4> а регион у тебя какой?
[10:59:14] <pimiento> екатеринбург
[10:59:17] <lk4d4> круто
[11:01:14] <pimiento> а чего завидуешь - у тебя хуже работа?
[11:01:30] <lk4d4> да, я QA инженер
[11:01:43] <pimiento> просто со знанием, а не как у меня основами, питона тут вон за 60-70 можно найти :)
[11:02:57] <lk4d4> криг мне кажется и в питере столько не рубит
[11:03:58] <pimiento> ну это одна контора тут так предлагает :) помню, висела вакансия программистом в финляндию - там около 150 в месяц выходило
[11:04:38] <pimiento> думал уже за 150 отказаться от еды на месяц и выучить всё :)
[11:15:36] <pimiento> Тэкс, как сделать в перл эту штуку я понимаю, а как в питон: можно ли указать stdin/stdout как значение переменной, в которую можно будет писать? В случае optparse это типа parser.add_option("-i", dest="dst_file", default="<STDIN>")
[11:16:58] <lk4d4> можно, указывай
[11:17:01] <pimiento> чтобы если не указан -i читался ввод из пайпа
[11:17:07] <pimiento> lk4d4: прямо так?
[11:17:28] <lk4d4> sys.stdin есть штука такая
[11:18:12] <pimiento> parser.add_option("-i", dest="dst_file", default=std.stdin) - так?
[11:18:21] <lk4d4> у него такие же методы, как у файла по идее
[11:18:29] <lk4d4> import sys не забываем
[11:18:38] <lk4d4> sys.stdin
[11:18:49] <pimiento> угу
[11:18:55] <lk4d4> но я думаю надо будет что-то подшаманить
[11:21:07] <lk4d4> можно просто сделать лихую схему
[11:22:15] <pimiento> Эт как?
[11:22:24] <lk4d4> типа
if not opts.i:
    s = raw_input("Input text: ")
[11:23:28] <pimiento> оно будет тогда брать вывод из echo test | script options ?
[11:23:55] <lk4d4> в принципе возможно что и будет
[11:24:03] <lk4d4> баш скриптам же так опции передают
[11:24:22] <pimiento> ну попробуем и так и так
[11:24:38] <lk4d4> ну ты делай, чтобы красиво было
[11:28:20] <pimiento> Пойду тогда доку по IO перечитаю
[11:28:50] <lk4d4> это верно
[11:51:06] <pimiento> Что-то не получается сделать. к ним нельзя применить одинаковый способ чтения чтоль? типа: for line in open(var, 'r'): где var может быть как файл, так и sys.stdin?
[11:55:45] <lk4d4> ну в том-то и пуля
[11:55:52] <lk4d4> что sys.stdin уже открытый файл
[11:57:24] <lk4d4> можешь попробовать написать колбек, который будет тебе возвращать что надо
[11:59:45] <pimiento> http://paste.pocoo.org/raw/468795/ - что скажешь про такой код?
[12:00:57] <pimiento> Он работает как надо, только не знаю насколько это правильно
[12:01:33] <lk4d4> ну и классно
[12:01:49] <lk4d4> только давай эксепшоны обрабатывай
[12:02:28] <pimiento> Типа каких?
[12:02:39] <lk4d4> например если файла такого нет
[12:03:13] <pimiento> и ещё правильно ли проверять if not options.fh или правильнее будет if options.fh is not None ?
[12:03:48] <lk4d4> ну вообще правильно, но криг рекомендовал второе вроде
[12:03:52] <lk4d4> или !=
[12:06:06] <pimiento> pep8 говорит Comparison to singletons like None should always be done with 'is' or 'is not', never equality operators
[12:06:19] <lk4d4> ну значит так и надо
[12:06:23] <pimiento> и ниже про то, что надо второй вариант
[12:06:47] <lk4d4> вообще есть же утилитка которая по pep8 проверяет
[12:06:53] <lk4d4> pylint и еще какая-то
[12:07:17] <lk4d4> и pep8 :P
[12:19:13] <pimiento> Вот мой код: http://paste.pocoo.org/raw/468808/ pep8 ругается на пустую строку в 18 строчке (её там нет), pylint http://dpaste.com/607403/plain/
[12:21:29] <pimiento> docstring для скрипта где должен быть? до или после import+
[12:21:34] <pimiento> ?
[12:23:18] <lk4d4> сейчас гляну
[12:23:23] <pimiento> блин! не тот скрипт скормил ему
[12:23:32] <pimiento> не смотри :) я там сам дурак
[12:23:33] <lk4d4> тем более
[12:23:51] <lk4d4> до
[12:25:38] <pimiento> а на положение докстринга ему плевать :)
[12:31:46] <pimiento> http://paste.pocoo.org/raw/468820/ - этот скрипт при выдаче IOError в следующей строке выводит ещё раз options.src_file
[12:32:06] <pimiento> Типа такого:
./unicode.py --from-code cp1251 --to-code utf-8 -i banana.txt
[12:32:07] <pimiento> Can't open file banana.txt.
[12:32:09] <pimiento> banana.txt
[12:33:00] <lk4d4> print(options.src_file)
[12:33:15] <lk4d4> что написал, то и выдает
[12:34:03] <pimiento> print("Can't open file "+ options.src_file + ".")
[12:34:26] <lk4d4> в самом конце у тебя принт стоит
[12:34:29] <lk4d4> не обманывай
[12:34:49] <pimiento> а эксепшен не должен разве его отменить?
[12:35:00] <lk4d4> ну ты же его обработал и дальше пошел
[12:35:15] <lk4d4> exit делай в except
[12:38:04] <pimiento> http://paste.pocoo.org/raw/468830/ - вот так?
[12:39:02] <lk4d4> ага
[12:39:42] <pimiento> Как бы теперь убрать лишнюю пустую строку в конце выдачи скрипта?
[12:44:01] <lk4d4> а откуда она берется?
[12:44:35] <pimiento> print последний добавляет
[12:45:13] <lk4d4> когда файл существует?
[12:46:17] <lk4d4> не должно быть никакой пустой строки
[12:46:21] <pimiento> это в файле перенос строки
[12:46:42] <pimiento> надо преобразовать файл в кортеж и чомпать его
[12:47:12] <lk4d4> так
[12:47:35] <lk4d4> options.src_file = open(options.src_file, 'r')
options.src_file = options.src_file.read()
[12:47:47] <lk4d4> тебя вообще не смущают такие штуки?
[12:48:13] <lk4d4> ну и вообще если в файле перенос строки, то почему бы ему его не печатать?
[12:48:50] <pimiento> ну, пожулуй да. хотя я привык чомпать :) перловая привычка
[12:49:19] <pimiento> ну, вообще меня те присваивания не смущают - не знаю насколько они правильны с точки зрения pep8 (pep8 не ругался)
[12:49:38] <lk4d4> они неправильны с точки зрения программиста
[12:50:15] <lk4d4> передаешь ты снаружи имя файла, а через некоторое время в этой переменной уже его содержимое
[12:50:39] <lk4d4> вообще предлагаю тебе в структуру options ничего не писать
[12:51:14] <lk4d4> а сделать src_file = open(options.src_file, 'r').read()
[12:51:17] <pimiento> http://paste.pocoo.org/raw/468834/ - так-то да, не стоит
[12:51:53] <lk4d4> ну и там тоже у тебя два раза тип src_file меняется
[12:51:55] <pimiento> в последнем забыл
[12:52:07] <lk4d4> не знаю насколько правильно, но выглядит не круто
[12:52:16] <lk4d4> воообще без else сделай
[12:52:29] <lk4d4>     try:
        src_file = open(options.src_file, 'r').read()
    except IOError:
        print("Can't open file " + options.src_file + ".")
        sys.exit(1)
[12:52:31] <pimiento> pep8 говорит делать с else
[12:52:44] <pimiento> http://paste.pocoo.org/raw/468835/
[12:55:05] <lk4d4> ну не знаю
[12:55:47] <lk4d4> мне не нравится
[12:56:25] <pimiento> http://dpaste.com/607420/plain/
[12:56:34] <lk4d4> да я читал
[12:57:31] <pimiento> http://docs.python.org/library/codecs.html#module-codecs - не пойму как здесь получить список доступных кодировок чтобы делать проверку типа: if src_code in codecs.list
[12:58:09] <pimiento> http://docs.python.org/library/codecs.html#codecs.getencoder - это?
[12:58:38] <lk4d4> да наверное в любой эксепшон обрабатывай и все
[12:58:48] <pimiento> а, ну да
[13:00:39] <lk4d4> у меня есть дичайшая идея
[13:00:43] <lk4d4> использовать _
[13:00:58] <pimiento> в каком месте?
[13:01:16] <lk4d4> хотя черт с ним
[13:01:29] <lk4d4> ну делать просто open() без input_file
[13:01:32] <lk4d4> а потом _
[13:01:45] <lk4d4> но это неявно как-то
[14:11:14] <pimiento> теперь я запутался с output'ом. как сделать такую же проверку на наличее выходного файла?
[14:38:46] <lk4d4> а какая разница?
[14:43:42] <pimiento> поел и допетрил :)
[15:24:58] <pimiento> А как входные данные сохранять в unicode-строки?
[15:26:08] <lk4d4> из args чтоли?
[15:29:59] <pimiento> о, кажись понял. сейчас покажу готовый код, покритикуй его :)
[15:33:02] <pimiento> http://paste.pocoo.org/raw/468871/ - достаточно ли комментирован и нужны ли ещё эксепшены? это аналог iconv
[15:34:37] <lk4d4> decode и encode эксепшонами не кидаются?
[15:34:48] <lk4d4> наверняка кидаются
[15:34:57] <pimiento> кидаются, уже обрабатываю
[15:35:33] <pimiento> http://paste.pocoo.org/raw/468872/
[15:36:47] <lk4d4> ну и выходи в except, что толку-то с неправильной кодировкой
[15:37:15] <pimiento> а, опять забыл, что эксепт не завершает
[15:38:10] <pimiento> http://paste.pocoo.org/raw/468873/ - вроде похоже на готовый скрипт :)
[15:38:44] <lk4d4> похоже на тот же самый
[15:39:36] <pimiento> совсем косячу просто =] http://paste.pocoo.org/raw/468874/
[15:40:27] <lk4d4> на третьем питоне пробовал?
[15:41:21] <pimiento> о, кстати, я же импортировал pickle для грамотной записи в файл. в третьем его нет? и надо его здесь прикрутить или так нормально?
[15:42:55] <pimiento> AttributeError: 'str' object has no attribute 'decode' - вот чего третий ругается
[15:43:10] <lk4d4> лучше писать под третий, а потом чутка подправлять под второй
[15:44:08] <pimiento> а как в третьем encode, decode работают?
[15:45:09] <lk4d4> а кто его знает
[15:45:32] <pimiento> вот и мне пока не хочется ковыряться :)
[15:45:48] <lk4d4> зато encode есть
[15:50:37] <lk4d4> вообще я на питоне только одну полезную программу написал
[16:01:39] <pimiento> а я вот вторую =]
[16:14:27] <pimiento> Как правильно переводить файл в кортеж? типа for line in sys.stdin: lines.append(line)
[16:15:11] <pimiento> а, это списки надо делать
[16:44:26] <lk4d4> file.readlines()
[16:47:13] <pimiento> Лутц говорит, что нужно использовать итераторы файлов:
input_data = []
for line in sys.stdin:
    input_data.append(line)
[16:47:24] <pimiento> Так работает правильно
[16:47:39] <lk4d4> я думаю в readlines ровно такой же код и написано
[16:47:47] <lk4d4> и глупо писать три строки вместо одной
[16:48:03] <pimiento> readlines - читает одну строчку вроде?
[16:48:10] <lk4d4> все в список читает
[16:48:16] <lk4d4> одну читает readline
[16:48:34] <lk4d4> вот не знаю как с sys.stdin все будет
[16:48:40] <lk4d4> но файл всегда читаю readlines()
[16:49:15] <pimiento> input_daat = sys.stdin.readlines() работает
[16:50:30] <lk4d4> в питоне почти всегда стоит юзать уже существующие реализации
[16:50:38] <lk4d4> только если не угорел по производительности
[16:50:55] <pimiento> это не про меня :)
[16:51:07] <lk4d4> а я вот кстати угорел
[16:51:16] <lk4d4> можешь посмотреть pqlop в санрайзе
[16:51:17] <pimiento> ладно, спасибо. пойду домой - дальше ботать :)
[16:51:22] <lk4d4> я там от re избавлялся
[16:51:25] <lk4d4> давай, удачи
[16:52:10] <pimiento> а в питоне только один тип re? вроде есть другой способ регулярок - производительнее
[16:52:46] <lk4d4> возможно что и есть
[16:54:53] <pimiento> ладно, мне пока тоже не до них. сейчас важнее доделать задания, чтоб сразу на полный оклад взяли
[16:55:57] <pimiento> пока
[16:56:05] pimiento вышел(а) из комнаты
[17:48:09] maksbotan вошёл(а) в комнату
[23:27:54] LK4D4 вошёл(а) в комнату
[23:33:22] maksbotan вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!