Бегущий по лезвию тяпки

17:33 

Искатель fb2

Antib
Ya! Ya! In his house at New Orlean, undead Lestat waits dreaming.
Причинив себе питоническое усилие волшебный пендель, доделал скрипт для поиска fb2 по ключевым словам в заданной папке. По желанию можно копировать найденные файлы в отдельную папку и удалять неправильно форматированные файлы.
Работает через командную строку, задаётся ключевое слово (с ключём -k) и путь к папке (с ключём -p), если не указан то используется текущая папка.


Оставлю тут для кучи ссылку на описание формата fb2.
Мутное же это дело - парсинг xml. Может конечно что это я с непривычки, но вольности позволенные в формате меня бесили.

@темы: Шпаргалка, Питон

URL
Комментарии
2014-09-06 в 20:48 

Юрий Рэйн
λOther side of the memory crystal. …λ
Мутное же это дело - парсинг fb2
Как и любого xml со сложной структурой).

Критика принимается?)

python3 search.py -p ./ -k слово
Запустить и проверить не уудалось, ибо в строке 126: found, bad = check_fb2_files(path, keyword)
TypeError: 'int' object is not iterable.
(Но если у тебя всё в порядке - значит всё ок.)

Но думаю, что в строках ниже if len(elem)>0 вообще не нужен, ибо итерация по пустому списку даёт нулевой результат.
По крайней мере код будет компактнее.


Ошибка: result =+ 1
Так же if result>0: будет верен всегда (мы же строчкой выше прибавляем).
В строках:


А так, разве что выиграть несколько милисекунд можно.

Не очень понятно, зачем удалять файл, если там просто испорчен один из тегов, местоположение которого можно получить из xml.etree.ElementTree.ParseError. (часто встречается).

2014-09-06 в 21:06 

Antib
Ya! Ya! In his house at New Orlean, undead Lestat waits dreaming.
Принимаю. Вот я не понял когда она возникает эта ошибка с int. Один раз у меня была, я порылся с добавлением аргумента и ошибка пропала. Раз десять прогнал поиск - всё нормально. Чую буду качать скилл дебагоюзания.

Но думаю, что в строках ниже if len(elem)>0 вообще не нужен, ибо итерация по пустому списку даёт нулевой результат.

Да, что-то мне такое говорили, но после удаления этого места у меня случился какой-то трудноуловимый логический баг и я его пока оставил.

URL
2014-09-06 в 22:01 

Юрий Рэйн
λOther side of the memory crystal. …λ
Исправил, места изменений подписал как # AT! It has been changed by Y.R.
Проблема в том, что при отсутствии fb2 книг fb2_list пуст и возвращался 0. А ожидалось, что функция вернёт два объекта, причём итерируемых.


2014-09-06 в 23:21 

Antib
Ya! Ya! In his house at New Orlean, undead Lestat waits dreaming.
Точно.
return 0 осталось с отладки, когда эта функция сама по себе была main
Тупил уже

URL
2014-09-06 в 23:23 

Юрий Рэйн
λOther side of the memory crystal. …λ
found.append(item) есть же в блоке, и всё работает). Строку print ("{} - keyword found".format(item)) действительно забыл(.
Остальное воспринималось как не несущее полезной нагрузки: pass-ы и код для подсобных нужд (вроде result+=1).
Впрочем это дело вкуса.

По недосмотру (ибо привык к os.walk, хотя и видел, что функция другая) запускал в папке, в которой файлов с таким расширением не было, а был какой-то файл в подпапке).
(Что по факту является недостатком скриптов, написанных "на коленке" - не только Unit тестов нет, так и запускаем обычно в идеальных условиях:) А другой берёт, делает пару ошибок - и всё падает.)

Помню, натыкался на обсуждение: если объекты не найдены, вызывать Exception и его перехватывать (но в Python-е дороговато получается), либо возвращать пустой список (или другой итерируемый объект), либо None (но тогда код несколько усложнится, за счёт проверок).

2014-09-06 в 23:27 

Юрий Рэйн
λOther side of the memory crystal. …λ
Antib, Бывает). Однажды после трудной учебной недели вообще писал один скрипт, а запускал на выполнение другой). И ведь ошибки похожие находил.
Или недавно в оконном приложении выводил ошибку в терминал, вместо окошка ошибки/диалога MessageBox.

2014-09-06 в 23:30 

Antib
Ya! Ya! In his house at New Orlean, undead Lestat waits dreaming.
Ну вот я и исправлю это таким образом, чтобы всё получало ожидаемый тип данных


URL
Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?
главная