Хм, и почему же это не подходит? вот например создаем файлы с разными кодировками: $iconv -f UTF-8 -t 866 <(echo Привет) > enc-866 $iconv -f UTF-8 -t WINDOWS-1251 <(echo Привет) > enc-windows-1251 $echo Привет > enc-utf-8 Теперь запускаем следующий код (использующий эту либу): Code: import glob from chardet.universaldetector import UniversalDetector detector = UniversalDetector() for filename in glob.glob('enc-*'): print filename.ljust(60), detector.reset() for line in file(filename, 'rb'): detector.feed(line) if detector.done: break detector.close() print detector.result $ python enc.py enc-866 {'confidence': 0.98999999999999999, 'encoding': 'IBM866'} enc-windows-1251 {'confidence': 0.98999999999999999, 'encoding': 'windows-1251'} enc-utf-8 {'confidence': 0.98999999999999999, 'encoding': 'utf-8'} Как видно, скрипт (точней либа) правильно определила разные кодировки.
Не обратил внимания на то что он работает со строками, в таком случае да, но я не доверяю чужим модулям, до тех пор пока они не попадают в стандартную библиотеку. Доверяю Гвидо на все 100%, такая цацка я думаю была бы востребована, если ее не включили в стандартную поставку(более чем уверен в том, что этот вопрос поднимался), знач чето с ней не то. Вообще, если разобраться по большому счету, то использование чужих модулей конкретно сказывается на юзерах - первое это зависимости(и неудобство как следствие того), а второе-это кривизна кода самого модуля, упрощение команд бота ИМХО(!) не стоит того, чтобы рисковать и ставить непонятно что, которое неизвестно как будет работать. Кому как, а я (с) Мы не ищем лёгких путей!
Сторонние модули будут всегда, в независимости от того хорошо они написаны или криво, из за того что в стандартную библиотеку по простому все не влезет, да и не надо оно там. Это тоже довольно спорно, юзер может даже и не знать что в программе используется тот или иной не стандартный модуль, по простому я могу распространять свою программу с этими модулями. Я думаю что люди пишущие модули, вполне способны качественно написать код, тем более если они это пишут не только для себя. Вполне известно, например для этой либы в документации есть файлик how-it-works.html где вполне кратко описан алгоритм работы либы (в крайнем случае можно пробежаться по коду). С этим согласен, бот должен по возможности состоять только из кода входящего в стандартную библиотеку (для минимизации размера, и возможность запуска в различных средах). Еще как вариант, можно использовать вот такой способ: Code: enc_list=['utf-8', 'windows-1251', 'IBM866'] def try_encoding(text): for try_enc in enc_list: try: unicode(text, try_enc, "strict") except: pass else: break return try_enc Правда с 866 он не выдает экзепшен, так что для этой кодировки нужно придумать что ни будь другое.
__mad К сожалению Universal Detector дает много неправильных срабатываний для достаточно коротких строк. Эксепшн в unicode тоже не панацея. Что ж, придется видимо первыми байтами передавать цифровой код, указывающую на кодировку, в случае отсутствия - переводить в хекс, а дальше пусть на той стороне разбираются
Мб лучше делать все через какой-то специализированный клиент, а юзерам давать возможность указывать кодировку? Просто даже если брать консоль, то в виндовой консоли cp866, а в лине обычно utf8, что уже получается хрен знает что.
how it works - нихера не показатель, я могу тоже много чего наворотить и описать как оно типа должно работать. Насчет стандартной библиотеки- не угадали, если взглянуть на тенденции в развитии питона а также на ареал его обитания, то сразу становится ясным что такая вещь была бы очень востребована (python3.1 -возможность указания кодировки при открытии файла, для внутреннего преображения используется utf8, дабы сие чудо работало так как нужно, то оно уже было бы встроенным во внутренности питона), плюс ареал его обитания -от мобильных устройств до Макоси. "Люди пищущие модули могут качественно написать код"-далеко не факт, я как и любой другой могу выложить свой код, вот только у меня сомнения в его качестве, уважаемый Gifts в свое время поднимал вопрос по оптимизации xmpp бота на python, ибо жрал он много оперативки, для создания бота использовался xmpppy, что-то мне подсказывает что если бы это было написано им лично, то такой вопрос не ставал бы (имею ввиду модуль для работы с xmpp).
И часто ли ты встречался с таким кодом (модулями) где автор пишет в описание одно, а код совершенно другой, помойму таки это уже попахивает паранойей. Да, и в мире СПО я с таким ни разу не встречался, обычно если есть какие то проблемы с модулем, о них пишут в секции Know Issue (Bugs, и т.п.), а за показатель качества кода говорит, например, комюнити сформировавшееся вокруг него. Возможность указания, и распознавание кодировки - это разные вещи. Но речь не об этом. В той мысли я имел ввиду не конкретный модуль, а то что необходимость пользоваться сторонними модулями будет всегда. А что ему мешало отрапортовать об проблеме автору бота? Уверен что он бы откликнулся и, возможно, исправил проблему, или же подсказал как это обойти. (В СПО, багрепорты, всегда приветствуются) Возможно, но так же могли бы и появится другие проблемы, да и думаю что времени было бы потрачено больше, чем на исправления этой проблемы.
Эхх, это не попахивает, это и есть паранойя и паталогическое недоверие к чужому коду (исключение составляют только действительно серьезные продукты, которые заслужили всеобщее признание и уважение , такие как Джанго, Твистед). Принципиально не использую сторонних модулей и считаю, что стандартной библиотеки питона в повседневной жизни хватает абсолютно с головой, для серьезных же проектов код пишется свой от А до Я (исключения из этого правила смотри выше). Если бы модуль автоматического определения кодировки работал исправно, то он бы давно уже был в стандартной поставке(хотя это может быть и только мое ИМХО). Необходимость использования сторонних модулей (не путать с фреймворками, см выше) стоит только для тех кто не хочет хотя бы на необходимом ему уровне разобраться с тем, чем он собрался оперировать, я же считаю неприемлимым для программиста работать с чем либо, не понимая КАК оно работает. Хотя в принципе я не программист, так что хз как там у кодеров принято... ============================================= P.S> Забыл добавить - я мудак и ламо
Почему не работает?(( Code: #!/usr/bin/env python # Gmail Account Checker import sys, poplib def printHelp(): print '\nUsage: ./gmailcheck.py <emaillist>' print 'Example: ./gmailcheck.py emails.txt' print '\nNote: The accounts must be in the following format: [email protected]:password\n' print ''' \t _____ _ _ \t| __|_____ ___|_| | \t| | | | .'| | | \t|_____|_|_|_|__,|_|_| \t Account Checker ''' if len(sys.argv) != 2: printHelp() exit(1) ......
Ужоснах ) Дай попробую угадаю - сие есть творчество Дегидрейта с darkc0de.com ?. aka Code: #d3hydr8[at]gmail[dot]com Можно подробнее: 1. Какая версия питона установлена на той машине, где запускают скрипт. 2. Трейсбек ошибки (или текстом, или желательно скрин). P.S. Желательно также ОС на которой это запускается, если для *nix, то как питон устанавливался (из репов или собирался вручную). И размер файлов которые грузятся в скрипт, ибо валидные акки хранятся в оперативке, и пишутся в файл уже после того как обработаются ВСЕ акки
попробуй запустить его через консоль, и скажи чего оно там выводит, самый простейший вариант - скопировать скрипт в корень диска C, потом зайти в консольку, сделать cd c:, потом имя_скрипта.py, вот ошибку которая вылезет скинешь сюда плиз, и уточни версию питона которая установлена у тебя на машине
Ой, вах-вах-вах, запустил токмо что сам, щас тебе переделаю его так чтоб не исчезал (он написан под Python2.6, поэтому на 3.1 запустить не получится)
Code: #!/usr/bin/env python # Gmail Account Checker import sys, poplib def printHelp(): print '\nUsage: ./gmailcheck.py <emaillist>' print 'Example: ./gmailcheck.py emails.txt' print '\nNote: The accounts must be in the following format: [email protected]:password\n' print ''' \t _____ _ _ \t| __|_____ ___|_| | \t| | | | .'| | | \t|_____|_|_|_|__,|_|_| \t Account Checker ''' printHelp() mailfile = raw_input("ENTER NAME OF FILE WITH ACCOUNTS :") #Change these if needed SAVEFILE = 'valid_accounts.txt' HOST = 'pop.gmail.com' PORT = 995 # Do not change anything below. maillist = mailfile valid = [] currline = 0 try: handle = open(maillist) except: print '\n[-] Could not open the accounts file. Check the file path and try again.' print '\n[-] Quitting ...' exit(1) for line in handle: currline += 1 try: email = line.split(':')[0] password = line.split(':')[1].replace('\n', '') except: print '\n[-] Erroneous account format at line %d.' % currline print '[!] Accounts must be in the following format: [email protected]:password' print '\n[-] Quitting ...' exit(1) ... Каммент: У дегидрейта все скрипты заточены для запуска через командную строку, этому скрипту нужно в качестве парметров передавать имя файла с аккми, т.е вызывать его через командную строку так :имя_скрипта.py имя_файла_с_акками.txt, я тебе пределал так, что он при запуске спросит имя файла с акками, введешь ему и дальше он (если он до сих пор актуален) должен запуститься нормально
Да не за что, ток он проверяет через pop3, так что про капчу можешь не париться, он неактуален станет, когда гугл начнет банить по айпишнику... И еще одно - мне не нравится как там сделана обработка ошибок, любой акк на котором вылезет любая ошибка будет считаться невалидным, короче чекер на 3 балла, дерьмовая обработка ошибок как минимум P.P.S> Скопируй переделанный мною скрипт еще раз - добавил чтоб он выводил ошибки во время работы, тогда хоть будешь знать на каком моменте он тормозит
Python 3.1 обновился до Python3.1.1 changelog Радует : - Issue #1424152: Fix for http.client, urllib.request to support SSL while working through proxy. Original patch by Christopher Li, changes made by Senthil Kumaran Теперь можно работать с SSL через проксю
Есть следующий код, скрипт должен удалить найденную строку: Code: for line in open("file.txt","r").readlines(): if line == "some string": # тут надо удалить строку, как это проще всего сделать?