Форум сайта python.su
857
doza_andНе, glob не годится. Долго объяснять, но я не знаю даже, где glob удобен.
Я бы в таком случае искал при помощи glob.
Kir@Это не имеет значения. Если у тебя второй питон, то используй юникод-строку для начального пути - os.walk() выдаст юникод-строки.
Директории называются русскими буквами вперемешку с пробелам
Kir@
Как теперь к этому коду прикрутить маску “*.doc?”?
>>> 'file.txt'.endswith(('.doc', '.docx')) False >>> 'file.doc'.endswith(('.doc', '.docx')) True >>> 'file.docx'.endswith(('.doc', '.docx')) True >>> 'file.doct'.endswith(('.doc', '.docx')) False >>>
>>> import re >>> >>> re.search(r'\.docx?$', 'file.txt') >>> re.search(r'\.docx?$', 'file.doc') <_sre.SRE_Match object at 0xb74291e0> >>> re.search(r'\.docx?$', 'file.docx') <_sre.SRE_Match object at 0xb7429100> >>> re.search(r'\.docx?$', 'file.doct') >>>
Отредактировано py.user.next (Авг. 20, 2015 12:22:00)
Офлайн
0
py.user.next, спасибо, я победил вот так:
for root, dirs, files in os.walk(czk): for name in files: if fnmatch.fnmatch(name, '*.doc?'): print(name)
... print(name) shutil.copy(os.path.join(czk,name), "/1")
Отредактировано Kir@ (Авг. 20, 2015 12:47:17)
Офлайн
857
Kir@Так неправильно ;) Во-первых, он не найдёт .doc, а во-вторых, он найдёт .doct, .doca и прочие.
спасибо, я победил вот так
def get_files_ext(source, exts)
files = get_files_ext('/somedir', ('doc', 'docx'))
def copy_to_dir(lst, dest)
copy_to_dir(files, '/anotherdir')
copy_to_dir(get_files_ext('/somedir', ('doc', 'docx')), '/anotherdir')
Отредактировано py.user.next (Авг. 20, 2015 13:04:54)
Офлайн
0
py.user.nextЫыы, ни одного знакомого слова
Ты функцию напиши, которая принимает путь поиска, а возвращает цепочку путей нужных файлов.
Офлайн
857
Kir@Не, просто в функцию запихиваешь вот этот вот поиск через os.walk(). А в другую - копирование через shutil.copy() .
Попробую угадать: os.path.abspath(path)?
Офлайн
0
py.user.nextУ меня ерунда получается + внутри функции программа не видит переменные, объявленные выше.
Не, просто в функцию запихиваешь вот этот вот поиск через os.walk(). А в другую - копирование через shutil.copy() .
Офлайн
857
Запости весь код и версию питона.
Офлайн
0
import codecs #Модуль для чтения в разных кодировках import os import fnmatch import shutil # Подключаем модуль для копирования файлов czk='//путь/Протоколы 08_2015/' pdzk='//путь/Протоколы 08 2015/' print(czk) print(pdzk) print('======================') #ЦЗК for root, dirs, files in os.walk(czk): for name in files: if fnmatch.fnmatch(name, '*.docx'): print(name) print('======================') #ПДЗК for root, dirs, files in os.walk(pdzk): for name in files: if fnmatch.fnmatch(name, '*.docx'): print(name) print('======================')
Отредактировано Kir@ (Авг. 20, 2015 14:00:20)
Офлайн
857
#!/usr/bin/env python3 import os import shutil def get_files_ext(source, exts): exts = tuple('.' + i for i in exts) for root, dirs, files in os.walk(source): for name in files: if name.endswith(exts): yield os.path.join(root, name) def copy_to_dir(seq, dest): for i in seq: shutil.copy(i, dest) def main(): input_dir = 'src' output_dir = 'dst' extensions = ('doc', 'docx') files = get_files_ext(input_dir, extensions) copy_to_dir(files, output_dir) if __name__ == '__main__': main()
Отредактировано py.user.next (Авг. 20, 2015 14:19:03)
Офлайн
88
У меня такое крутится:
def walk_dtree(path): for dpath, _, fnames in os.walk(path): for f in (_f for _f in fnames if _f.lower().endswith(('.doc', '.docx'))): yield os.path.join(dpath, f)
Офлайн