|   |   | 
| 
 | Поиск каталога на Python | ☑ | ||
|---|---|---|---|---|
| 0
    
        Злобная Печенька 25.05.14✎ 16:00 | 
        Всем привет) Пишу парсилку файлов на питоне. Сама парсилка почти готова, но возникла проблема. Хочу настроить, чтобы скрипт смотрел только в определенных директориях. Попробовала разные варианты, пока ничего не получается(( Может вы подскажете:
 [code] import re path = re.match(r'(\d+)05(+\d)','C:\Users\\Documents\SC\LOG') [/code] такой код выводит ошибку File "C:\Python27\lib\re.py", line 137, in match return _compile(pattern, flags).match(string) File "C:\Python27\lib\re.py", line 242, in _compile raise error, v # invalid expression error: nothing to repeat Хотя в папке LOG присутствует несколько подходящих директорий | |||
| 1
    
        Злобная Печенька 25.05.14✎ 16:16 | 
        Заметила косяк, поменяла на  re.match(r'(\d+)05(\d+)', теперь выдает другую ошибку...     | |||
| 2
    
        Злобная Печенька 25.05.14✎ 16:18 | 
        + (1) TypeError: coercing to Unicode: need string or buffer, NoneType found     | |||
| 3
    
        Злобная Печенька 25.05.14✎ 16:32 | 
        path = r'C:\Users\\Documents\SC\LOG\(\d+)05(\d+)', так вроде работает, но не выдает ничего. Блин, ничего не понимаю(     | |||
| 4
    
        Web00001 25.05.14✎ 16:35 | 
        когда писал http://www.1c-cod.ru/ сильно помогла тестилка регулярных выражений (написанная на питоне) http://re-try.appspot.com/ ну и книжка Дж.Фридл - Регулярные выражения. Тоже в тему     | |||
| 5
    
        Злобная Печенька 25.05.14✎ 16:36 | 
        (4) Спасибо, иду смотреть))     | |||
| 6
    
        Ammophilla 25.05.14✎ 16:48 | 
        ))
 import os path_to_dir = ‘.’ #здесь путь к твоей директории os.listdir(path_to_dir) - это все файлы, которые есть в данной директории. Ты ведь знаешь, какая директория тебе нужна… | |||
| 7
    
        Злобная Печенька 25.05.14✎ 16:50 | 
        (6) В том то и дело, что путь не однозначен. НАпример в папке LOG могут быть папки 010314, 020414, 050514. Поиск в одном каталоге у меня и так работает)) Надо, чтобы в каталоги по маске смотрел     | |||
| 8
    
        kokamoonga 25.05.14✎ 17:35 | 
        (0) вариант в (0) и не будет работать, ты же ему строку для сравнения задаешь 'C:\Users\\Documents\SC\LOG'
 (3) этот вариант непонятно как должен работать. 05 укладывается в паттерн \d+ Не проще сделать это через os.listdir() с поиском в списке по маске? | |||
| 9
    
        kokamoonga 25.05.14✎ 17:39 | 
        (3) + кроме того здесь сознательно двойной слэш после Users?     | |||
| 10
    
        Злобная Печенька 25.05.14✎ 17:45 | 
        (9) нет, убрана фамилия)))     | |||
| 11
    
        Злобная Печенька 25.05.14✎ 17:46 | 
        (8) мне надо, чтобы он искал папки, в которых есть совпадение 05. os.listdir() попробую, спасибо     | |||
| 12
    
        kokamoonga 25.05.14✎ 17:48 | 
        (11) ну так os.listdir('C:\Users\\Documents\SC\LOG') ты получаешь список всех имен в директории
 если там могут быть и файлы дополнительно можно проверять os.path.isdir() | |||
| 13
    
        Злобная Печенька 26.05.14✎ 14:19 | 
        Вернусь к своим баранам, ой парсилкам) прошу сильно не бить))
 в итоге получаю код mfile = re.compile(r'\b[A-Z0-9._%+-]+05+\b[A-Z0-9.-]') dirs = 'C:\Users\111\Documents\SC\LOG\\'+ mfile.findall() +'\\' print dirs Выходит ошибка TypeError: Required argument 'source' (pos 1) not found Если пишу так mfile = '\b[A-Z0-9._%+-]+05+\b[A-Z0-9.-]' dirs = 'C:\Users\Gshelganova\Documents\SC\LOG_tgk\\'+ mfile +'\\' print dirs все работает, но маску он понимает буквально. И это пейчаль(( os.lisdir пробовала, не помогает. | |||
| 14
    
        Web00001 26.05.14✎ 16:00 | 
        >>TypeError: Required argument 'source' (pos 1) not found 
 Так это, того, findall ожидает паттерн для поиска в аргументах https://docs.python.org/2/library/re.html#re.RegexObject.findall | |||
| 15
    
        Злобная Печенька 26.05.14✎ 16:17 | 
        Нашла решение- 
 dirs = glob.glob('C:\Users\\Documents\SC\LOG\\*05*\\') Получаю список, и уже по списку циклом пробегаю)) Всем спасибо за помощь! | |||
| 16
    
        kokamoonga 26.05.14✎ 19:47 | 
        (13) >>> os.lisdir пробовала, не помогает.
 так чисто для интереса, а как именно не помогает? не перечисляет имена в каталоге? или есть сложности с обходом списка имен в цикле? Вот такой код не работает? import re import os root = 'C:\Users\Gshelganova\Documents\SC\LOG_tgk\' names = os.listdir(root) dirs = [x for x in names if os.path.isdir(os.path.join(root, x)) and re.match(r'.*05.*', x)] | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |