|
Поиск каталога на 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)] |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |