Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Спешу похвастаться!


Автор: proDiva 26.9.2006, 14:25
Я закончила свою первую прогу на питоне!!! Ее функции: 1. Читает xml-файлы с электронными платежными документами (для незнающих: это банковские платежки); 2. Создает dbf-файл и закачивает в него данные из xml-файла; 3. Корректирует наименования счетов (находит их в текстовом файле); 4. Печатает реестр электронных документов; 5. Формирует новый xml-файл с исправлениями.

Если таким же начинающим, как я, интересен код, могу скинуть по электронке.

Автор: J2A 26.9.2006, 15:08
Цитата(proDiva @ 26.9.2006,  17:25)
2. Создает dbf-файл и закачивает в него данные из xml-файла;

Какой модуль используешь?

Автор: pythonwin 26.9.2006, 15:30
Цитата(proDiva @  26.9.2006,  21:25 Найти цитируемый пост)

Если таким же начинающим, как я, интересен код, могу скинуть по электронке.


а почему на форуме не можешь выложить? smile

Автор: proDiva 26.9.2006, 15:51
Цитата(J2A @  26.9.2006,  15:08 Найти цитируемый пост)
Какой модуль используешь? 

dbf.py

Цитата(pythonwin @  26.9.2006,  15:30 Найти цитируемый пост)
а почему на форуме не можешь выложить?

код очень длинный. 
Могу выложить отдельные функции. Не могу ручаться за рациональное построение программы, но, что все верно работает, гарантирую. Как мне уже сказали, есть много готовых модулей, а я дедовским методом писала ручками.

Автор: J2A 26.9.2006, 18:20
Цитата(proDiva @ 26.9.2006,  18:51)
Цитата(J2A @  26.9.2006,  15:08 Найти цитируемый пост)
Какой модуль используешь? 

dbf.py

Не самый быстрый, не самый удобный. Альтернативы см. на http://omsk.lug.ru/wacko/Python/Dbf

Автор: PyAlexey 27.9.2006, 07:22
Цитата(proDiva @  26.9.2006,  15:51 Найти цитируемый пост)
код очень длинный. 

Так выкладывайте, уважаемая, архив в аттач сообщения )).

Автор: pythonwin 27.9.2006, 07:51
Цитата(PyAlexey @  27.9.2006,  14:22 Найти цитируемый пост)

Так выкладывайте, уважаемая, архив в аттач сообщения )). 

Поддерживаю!

proDiva, если сможешь, то пожалуйста, - выложи код. smile

если тебя потом за это накажут на работе, но можешь не выкладывать - думаю все поймут. smile

Но если выложишь на форум код, то возможно в результате совместной работе у тебя будет более совершенный код + ты получишь дополнительные знания и навыки. smile

Автор: PyAlexey 27.9.2006, 08:31
Цитата(pythonwin @  27.9.2006,  07:51 Найти цитируемый пост)
Но если выложишь на форум код, то возможно в результате совместной работе у тебя будет более совершенный код + ты получишь дополнительные знания и навыки. smile 

И интелегентную мужскую компанию ))).
В общем, ждём.

Автор: proDiva 27.9.2006, 10:22
Цитата(PyAlexey @  27.9.2006,  08:31 Найти цитируемый пост)
И интелегентную мужскую компанию )))

Ну тогда подсказывайте, интеллигентная мужская компания)), куда и как выкладывать, а то "в аттач сообщения" - мне не о чем не говорит))))
 
Цитата(pythonwin @  27.9.2006,  07:51 Найти цитируемый пост)
то возможно в результате совместной работе у тебя будет более совершенный код + ты получишь дополнительные знания и навыки.

а по-моему, интеллигентная мужская компания просто хочет убедиться, что девушки не умеют программировать......... и лишний раз убедиться в своем превосходстве)))
Парни, я нисколько этому не сопротивляюсь, у вас мышление для программирования "качественней"!

Автор: PyS 27.9.2006, 10:41
Цитата(proDiva @  27.9.2006,  13:22 Найти цитируемый пост)

Ну тогда подсказывайте, интеллигентная мужская компания)), куда и как выкладывать, а то "в аттач сообщения" - мне не о чем не говорит))))

это как вложения в эл. почте smile

Цитата(proDiva @  27.9.2006,  13:22 Найти цитируемый пост)

а по-моему, интеллигентная мужская компания просто хочет убедиться, что девушки не умеют программировать......... и лишний раз убедиться в своем превосходстве)))


нет! smile
Думаю, что любопытство движет нами! smile

Автор: pythonwin 27.9.2006, 11:00
Цитата(proDiva @  27.9.2006,  17:22 Найти цитируемый пост)

Парни, я нисколько этому не сопротивляюсь, у вас мышление для программирования "качественней"!

 smile 
что-то среди первых программистов много было женщин.

Добавлено @ 11:00 
 smile 

Автор: PyS 27.9.2006, 11:06
proDiva, тебе с атачем помочь?

Автор: proDiva 27.9.2006, 11:31
Цитата(PyS @  27.9.2006,  11:06 Найти цитируемый пост)
тебе с атачем помочь?

Спасибо, уже подсказали.

Цитата(pythonwin @  27.9.2006,  11:00 Найти цитируемый пост)
что-то среди первых программистов много было женщин.

У женщин память лучше, но творческое мышление развито хуже....... т.е. что-то новое нам трудно изобретать, но зато пользуемся чужим опытом превосходно smile

Добавлено @ 11:35 
Щас посмотрим, что получится)))

Добавлено @ 11:37 
Урра! получилось))

Автор: PyS 27.9.2006, 12:04
во вложении
Думаю, что proDiva, будет не против. smile

Автор: ser_gen 27.9.2006, 12:06
        #возвращает дату (yyyy-mm-dd) в формате dd.mm.yyyy
        #r-входящая дата

По моему это лучше оформить ввиде строки документации

def dataform(self, r):
        """
           возвращает дату (yyyy-mm-dd) в формате dd.mm.yyyy
           r-входящая дата
        """

Ну и далее тоже самое.
А так ничего.

Автор: PyAlexey 27.9.2006, 12:09
ser_gen, а ещё лучше — в Epytext Markup Language (epydoc).
А так, пока нет времени смотреть исходники.

Автор: pythonwin 27.9.2006, 13:14
Отлично!
может http://vingrad.ru/@J2A что-то мощное предложит?

Автор: proDiva 27.9.2006, 13:14
Цитата(PyS @  27.9.2006,  12:04 Найти цитируемый пост)
Думаю, что proDiva, будет не против.

Для полноты архива не хватает пробного xml-файла..... чтобы проверить работу программы.

Добавлено @ 13:15 
Цитата(proDiva @ 27.9.2006,  13:14)
Цитата(PyS @  27.9.2006,  12:04 Найти цитируемый пост)
Думаю, что proDiva, будет не против.

Для полноты архива не хватает пробного xml-файла..... чтобы проверить работу программы.

Вот выкладываю.

Автор: PyS 27.9.2006, 13:18
Цитата(proDiva @  27.9.2006,  16:14 Найти цитируемый пост)
Присоединённый файл  A9C0H91M.O0X 2,12 Kb

Это xml-файл?

Автор: PyAlexey 27.9.2006, 13:26
Цитата(PyS @  27.9.2006,  13:18 Найти цитируемый пост)
Это xml-файл? 

Да, со расширением )).

Автор: PyS 27.9.2006, 13:46
Цитата(proDiva @  27.9.2006,  16:14 Найти цитируемый пост)

Присоединённый файл  A9C0H91M.O0X 2,12 Kb

Спасибо!

Автор: PyAlexey 27.9.2006, 14:05
proDiva
Короче, посмотрел я код. Как здесь уже говорили, лучше было бы использовать другой модуль для dbf. Также стоило использовать нормальный модуль для xml. Далее. Зачем везде писали путь для файлов? К тому же такие: ‘c:/XML_Editor/’. Надо было использовать переменные, а пути делать относительными.

Честно говоря, мне не понятно, Вы первый раз пишите на Питоне или программу вообще?

Автор: Vach 27.9.2006, 14:51
proDiva, какой у тебя wx стоит (или версия другая или я того...)? + при кодировки не cp1251 запустить не получается (мой случай)

Автор: proDiva 27.9.2006, 15:10
Цитата(PyAlexey @  27.9.2006,  14:05 Найти цитируемый пост)
Честно говоря, мне не понятно, Вы первый раз пишите на Питоне или программу вообще? 

Первый раз на питоне
а в замечаниях вы правы........ я говорила, что не уверена в рациональности
насчет путей, исправлю....... просто я делала все по частям, а потом собрала в кучу....... и получилось, что везде прописаны пути)) (мне бывший коллега тоже все время говорил, не вбивать пути...... как видите, продолжаю)
а с xml я работаю впервые и выбрала вариант, который смогла разобрать по частям.

Цитата(Vach @  27.9.2006,  14:51 Найти цитируемый пост)
какой у тебя wx стоит (или версия другая или я того...)?

версия 2.6

Автор: J2A 27.9.2006, 18:47
Для первого опыта вполне удачно.

1. Не нужно импортировать os.path, он доступен и при импорте просто os
2. Не рекомендуется делать "from foo import *", следует либо "from foo import Foo, Bar", либо "import foo". Почему: не знаешь точно какие переменные импортировала. Так кстати и http://[url=http://omsk.lug.ru/wacko/Python/Perfomance/MyTips#h448-3.
3. По стилю все же рекомендуется классы называть с большой буквы, т.е. не "class foo", а "class Foo"
4. Переформатирования слишком сложны (класс dataload). Можно сделать гораздо проще. Например так: 
а) переформатирование даты '.'.join(reversed('2006-05-25'.split('-'))) (можно для увеличения читабельности разбить по переменным).
б) переформатирования дробного "%.2f" % value
в) выравнивание строки пробелами влево/вправо: mystr.ljust(n), аналогично и .rjust
г) ну и я бы не оформлял как класс (никакого преимущества нет, т.к. не использует ни один атрибут), а оформил как функции. С учетом вышеперечисленных примеров, выделять в функцию стоит лишь переформатирование даты, остальное и так в одну конструкцию smile
5. Не стоит городить огород с if .. elif .. elif .. elif .. else. Возможно, проще будет http://omsk.lug.ru/wacko/Python/Perfomance/MyTips#h448-2.
6. Всё же лучше разбить по модулям. 70кб-исходник тяжко читать, да и реиспользовать потом проще будет.

Извини, дальше меня не хватило...

Автор: proDiva 27.9.2006, 19:31
Цитата(J2A @  27.9.2006,  18:47 Найти цитируемый пост)
Извини, дальше меня не хватило...

На долго же тебя хватило smile  Нужно это все записать, а то не запомню все сразу.
Я про это и говорила, что не знаю готовых функций для того или иного действия, поэтому громоздила громадный код. По всем этим мелочам неудобно новые темы открывать и мучать людей своими вопросами smile 

Я знаю, что все можно было написать проще и удобнее. Но я все равно довольна, что я ее доделала, а главное - что она работает! Потому что когда я начинала ее писать, я питоновский код впервые в глаза увидела. Как наш зав.кафедрой на лекциях говорил: "Есть прорыв! Идем дальше!"
Так что, интеллигентная мужская компания, продолжайте учить дальше smile 

Автор: PyAlexey 27.9.2006, 20:12
Кстати, проверьте свой код на вшивость: http://pychecker.sourceforge.net/

Автор: J2A 27.9.2006, 20:36
Цитата(PyAlexey @ 27.9.2006,  23:12)
Кстати, проверьте свой код на вшивость: http://pychecker.sourceforge.net/

Проверьте http://www.logilab.org/projects/pylint'ом и ужаснитесь smile это не к коду ProDiva или PyAlexey, а ко всем smile

Автор: pythonwin 28.9.2006, 07:39
Цитата(J2A @  28.9.2006,  03:36 Найти цитируемый пост)
Проверьте pylint'ом и ужаснитесь smile это не к коду ProDiva или PyAlexey, а ко всем smile

Это что такое?

Автор: pythonwin 28.9.2006, 08:21
Цитата(J2A @  28.9.2006,  03:36 Найти цитируемый пост)
роверьте pylint'ом и ужаснитесь smile

А можешь показать пример использования? smile

Автор: PyAlexey 28.9.2006, 15:33
Цитата(J2A @  27.9.2006,  20:36 Найти цитируемый пост)
Проверьте pylint'ом и ужаснитесь

GNU GCC, кстати, очень много ошибок в коде proDiva находит. Вот уж есть над чем ужаснуться.

Автор: slav0nic 28.9.2006, 15:42
pylint надо с параметрами запускать, так он мне влепил -2 балла)) и джаббер клиенту Gajim - тоже, основная часть ошибок - формирование кода, пробелы одиночные, а не табы и тп

Автор: proDiva 28.9.2006, 16:31
Цитата(PyAlexey @  28.9.2006,  15:33 Найти цитируемый пост)
GNU GCC, кстати, очень много ошибок в коде proDiva находит. Вот уж есть над чем ужаснуться.

может оставим мой код в покое? такое ощущение как-будто я его на олимпиаду выставила с большим денежным главным призом)))
Цитата(proDiva @  26.9.2006,  14:25 Найти цитируемый пост)
Если таким же начинающим, как я, интересен код, могу скинуть по электронке.

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

Автор: pythonwin 29.9.2006, 07:39
Цитата(proDiva @  28.9.2006,  23:31 Найти цитируемый пост)

может оставим мой код в покое? такое ощущение как-будто я его на олимпиаду выставила с большим денежным главным призом)))


proDiva, ты главное не переживай - поругали - исправь код - поругают - исправь код - .... - исправь код - похвалили!

В конще этой цепочки получишь прекрасный код + навыки.
И ещё - тебя уже похвалил J2A:
Цитата(J2A @  28.9.2006,  01:47 Найти цитируемый пост)
Для первого опыта вполне удачно.


Поэтому не растраивайся smile

Автор: proDiva 29.9.2006, 08:22
Цитата(pythonwin @  29.9.2006,  07:39 Найти цитируемый пост)
proDiva, ты главное не переживай - поругали - исправь код - поругают - исправь код - .... - исправь код - похвалили!

В конще этой цепочки получишь прекрасный код + навыки.
И ещё - тебя уже похвалил J2A:

В этой программе при всем уважении к Вам я ничего менять не буду - ни времени, ни желания! С понедельника уже с ней будут работать, завтра поставлю. Exe-шник уже подготовила.

А навыки и Ваши советы буду применять уже в следующих тех.заданиях, так что не расслабляйтесь smile 

Автор: PyS 29.9.2006, 12:17
Цитата(proDiva @  29.9.2006,  11:22 Найти цитируемый пост)

А навыки и Ваши советы буду применять уже в следующих тех.заданиях, так что не расслабляйтесь smile 


Вот и прекрасно! smile

Автор: dvska 29.9.2006, 16:04
Цитата(proDiva @ 27.9.2006,  19:31)
Я про это и говорила, что не знаю готовых функций для того или иного действия, поэтому громоздила громадный код. По всем этим мелочам неудобно новые темы открывать и мучать людей своими вопросами smile 

А вот это зря. Форум для того и нужен. А потом и другие новички по этим темам учиться будут.

Бери пример с http://groups.google.com/group/turbogears/browse_thread/thread/85de0147f7eb5711/903f9ff80322d85f?lnk=st&q=pythonwin&rnum=9#903f9ff80322d85f-а ;)

Автор: cherep 2.10.2006, 01:54
По моему это провокация. =) 
Для первого раза на питоне действительно очень неплохо. Видно, что proDiva имеет солидный опыт программирования в других языках. Единственно, мне показалось, что программа написана местами достаточно в процедурном стиле, на Питоне зачастую удобнее и проще использовать функц. подход.
Так держать!!!

Добавлено @ 02:07 
Про процедурный стиль...

Там есть библиотечка strutil.py

Я конечно понимаю, что она 99 года, но все равно интересно, насколько не по питоновски там написаны функции.

Возьмем к примеру 

Код

def stripLeading(aString, aChar):
    # answer a String which is aString with leading aChar's removed
    # jjk  01/11/96
    s1 = aString
    p1 = 0
    while ((p1 < len(s1)) and (s1[p1] == aChar)):
        p1 = p1 + 1
    if (p1 > 0):
        s1 = s1[p1:]
    return(s1)


С ходу можно переписать так

Код

def stripLeading1(s, ch):
    while s[0] == ch:
        s = s[1:]
    
    return s


А если поднапрячься, то и вовсе так:

Код

def stripLeading2(s, ch):
    import re
    return re.sub(r"^"+ch+"+", "", s)

Автор: cherep 2.10.2006, 02:24
Код

m = m + s --> m += s

if a != "" and b != "" and c !="": --> if a and b and c:

Вот это еще понравилось:
                    for word in line.split("+"):        # режем каждую строку на слова, ограниченные "+"
                        if i == 1:
                            data=word
                            i+=1
                        elif i == 2:
                            docno=word
                            i+=1
                        elif i == 3:
                            summa=word
                            i+=1
                        elif i == 4:
                            schet=word
                            i+=1
                        elif i == 5:
                            inn=word
                            i+=1
                        elif i == 6:
                            name=word

-->

data, docno, summa, schet, inn, name = line.split("+")


И дальше в том же духе smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)