Форум сайта python.su
253
Неожиданно активная дискуссия.
Сам давным давно пользуюсь вот такими итераторами. По функциональности имитируют юниксовый find. Пока хватало, но может и надо чего подправить…
def PathFind(pattr, root="."): u"""аналог find из bash""" for di, dl, fl in os.walk(root): for f in glob.fnmatch.filter(fl, pattr): yield os.path.join(di, f) def PathFindDir(pattr, root="."): u"""аналог find из bash""" for di, dl, fl in os.walk(root): for f in glob.fnmatch.filter(dl, pattr): yield os.path.join(di, f)
import win32com.client word = win32com.client.gencache.EnsureDispatch("Word.Application") word.Visible = 0 time.sleep(1) word.Documents.Open(os.path.abspath(out_file)) doc = word.Documents(word.ActiveDocument()) with open(os.path.abspath(out_file)+".txt","w",encoding="utf-8") as f: f.write(doc.Content.Text)
Отредактировано doza_and (Авг. 20, 2015 21:04:26)
Офлайн
857
doza_andВо-первых, внутри модуля glob не документировано, что там есть доступ к fnmatch - значит, то, что он основан на fnmatch и основан именно таким образом, вилами на воде писано. Хочешь юзать fnmatch - импортируй модуль fnmatch.
Пока хватало, но может и надо чего подправить…
doza_andОдна рекурсия - маловато для имитации. Вообще-то, там есть поиск и по регуляркам, где можно искать и doc, и docx (уж не говоря про odt, который может вдруг понадобиться), и другие одновременно (за один проход).
По функциональности имитируют юниксовый find.
doza_andВот-вот, нужно найти и doc, и docx, а так оно не найдёт, и нужно делать два вызова (два прохода). Это во-вторых.def PathFind(pattr, root="."):
ShamanНо мы-то видим, что это быдлокод ;)
я пишу код с генератором и проблем не имею
Отредактировано py.user.next (Авг. 21, 2015 00:36:12)
Офлайн
88
py.user.nextВы, наверное, мало работали с чужим кодом. Прокачивайте свой скилл.
Но мы-то видим, что это быдлокод
В чём быдлокодистость: человек берёт и делает генератор, который не делает ничего. Тратит ресурсы на этот генератор, чтобы сэкономить одну строчку.
А ты в курсе, что его ещё нужно сидеть и перечитывать по пятьсот раз, чтобы убедиться, что ты его без ошибок написал?
Код пишется один раз, а читается - тысячу.
Офлайн
857
ShamanЭто ты про себя пишешь. Если бы ты работал, то имел бы дело с понятным кодом и писал бы так же. А так ты для себя написал, как быдлокодер однострочник, у которого никто код не юзает.
Вы, наверное, мало работали с чужим кодом. Прокачивайте свой скилл.
ShamanЭто случай не тот, у тебя генератор не представляет из себя ничего (конструкция типа (f for f in seq) ), а его применение ты аргументируешь лишней строчкой (кстати, вполне читаемой, и более читаемой).
в свою очередь вижу задротство в учете ресурсов там где их море
Отредактировано py.user.next (Авг. 21, 2015 00:45:38)
Офлайн
88
py.user.nextЯ имел дело с разным. Как я должен писать поле такого?
Это ты про себя пишешь. Если бы ты работал, то имел бы дело с понятным кодом и писал бы так же.
py.user.nextСовершенно верно, это был код “для себя”. Не нравится - никто не заставляет.
А так ты для себя написал, как быдлокодер однострочник, у которого никто код не юзает.
py.user.nextЭто костыльная замена несуществующей конструкции о которой я написал выше. И если из-за неё начнёт использоваться на несколько миллипроцентов больше памяти со временем, я это смогу пережить.
Это случай не тот, у тебя генератор не представляет из себя ничего
Офлайн
88
py.user.next
Кстати, твой код, приведённый выше, может не увидеть некоторые файлы - вот где проблема.
Офлайн
857
ShamanВот этот? Интересно, какие он может не увидеть, если он просматривает все.
Кстати, твой код, приведённый выше, может не увидеть некоторые файлы - вот где проблема.
ShamanПроблема в том, что он не делает ничего, а чтение усложняет. Да, и зачем ты там сделал _f ? Ты разве не знаешь, что внутренние имена в comprehensions остаются внутренними и там можно оставить f?
И если из-за неё начнёт использоваться на несколько миллипроцентов больше памяти со временем, я это смогу пережить.
Отредактировано py.user.next (Авг. 21, 2015 01:01:48)
Офлайн
88
py.user.nextПосмотри внимательно на мой код.
Вот этот? Интересно, какие он может не увидеть, если он просматривает все.
Офлайн
88
py.user.nextКак же ничего, если он фильтрует?
Проблема в том, что он не делает ничего, а чтение усложняет.
Офлайн
857
ShamanА, ты имеешь ввиду lower()? А с чего вдруг я должен переносимый код подстраивать под винду? ;) Вот он под линем и съест у тебя не те файлы.
Посмотри внимательно на мой код.
Отредактировано py.user.next (Авг. 21, 2015 01:07:20)
Офлайн