Форум сайта python.su
0
Здрям!
В директории со скриптом питона лежит кучка txt файлов.
Надо в каждом файле по регулярному выражению найти нужный номер телефона, скопировать найденное значение в файлик result.txt.
Нихт арбайтен 
import os import glob import re def process(root, pattern, outfn): # открываем выходной файл with open(outfn, "w") as out: # готовим итератор файлов, соответствующих шаблону for fn in glob.iglob(os.path.join(os.path.abspath(root), pattern)): # открываем каждый найденный файл with open(fn, "r") as f: #построчная обработка for line in f: zvonok=re.search(r'(66666)[\s\d\/:;.&]*',f) # пишем результат обработки в выходной файл out.write(zvonok) process('.', '*.txt', 'result.txt')
Офлайн
72
Так у вас функция не вызывается, последнюю строчку надо придвинуть к левому краю. И, кстати, регулярка очень странная написана.
Офлайн
857
PooHЭто он, походу, не проэкранировал скобки.
И, кстати, регулярка очень странная написана.
Офлайн
253
В данном случае будет короче если использовать
https://docs.python.org/2/library/fileinput.html
Офлайн
0
py.user.nextНе, это я их не там поставил.
Офлайн
0
Рабочая версия:
import os import glob import re def process(root, pattern, outfn): # готовим итератор файлов, соответствующих шаблону for fn in glob.iglob(os.path.join(os.path.abspath(root), pattern)): # открываем каждый найденный файл with open(fn, "r") as f: a=f.read() #поменять номер zvonok=re.search(r'(66666)\s*(\d{1,2}\/\d{1,2})\s*([(\d{1,2}\:)]*)\s*([(\d{1,2}\:)]*)[\s\d\.:]*\&([\d]*)', a) if zvonok: zvonok_print='абонент '+zvonok.group(1)+' позвонил '+zvonok.group(2)+' в '+zvonok.group(3)+' абоненту '+zvonok.group(5)+'. Продолжительность звонка '+zvonok.group(4)+'\n' result = open('result.txt', 'a') result.write(zvonok_print) #print(zvonok_print,'\n') else: zvonok_print='сегодня никому не звонил' f.close() result.close() process('.', '*.txt', 'result.txt')
Отредактировано Kir@ (Янв. 26, 2016 05:53:01)
Офлайн