Форум сайта python.su
0
блин. мой косяк - файл изначально txt - я просто взял часть и пересохранил, исходник пару тысяч строк имеет и когда сохранял не проверил
Перезалил файл
Прикреплённый файлы:
info.txt (559 байт)
Офлайн
857
Там \r\n на концах строк, но при чтении они должны преобразоваться в \n.
Выполни
repr(open('somefile.txt').read())
Отредактировано py.user.next (Авг. 21, 2015 14:21:58)
Офлайн
0
вообщем выходит цветок из данилы-мастера но шипами наружу
я удалил /r и заменил /n/n на /n (это встречалось в конце каждого блока) - все равно пустой лист создается
Тогда я попробовал скопировать кусок текста прямо в код и поиграть с паттерном - получилось что он очень воспреимчив к отступам от края. Я сделал вариант когда текст имеет отступ и вариант когда он его не иммет. (открываю америку сейчас) и получилость что необходимо или иметь отступ или не иметь его и аналогично подстроить паттерн
И все взлетело - но ну очень медленно. Файл объемом в 500кВ парсится секунд 45 (машина 16гб и проц i7)
может быть есть ли какой-либо способ драматически ускориться? Я привожу финанльный код ниже
import re pat = r""" MemTotal: +(\d+) kB MemFree: +(\d+) kB Buffers: +(\d+) kB""" def myRead(): with open ("somefile.txt", "r") as myfile: data=myfile.read() data = re.sub('\r','',data) data = re.sub('\n\n','\n',data) return data s = myRead() lst = [] for i in re.findall(pat, s): s = [int(x) for x in i] lst.append(dict(zip(('total', 'free', 'buffers'),s))); print(lst)
Офлайн
0
причем самое что странное - результат то он печатает сек через 10 (что так же много) а остальное время тупо “висит”
Офлайн
1
Я извиняюсь что встрял. Я большинство программного кода написанного вами не понимаю еще. Но почитываю для общего развития и иные ветки форума. Мне попадалось пару раз про IDE, полезная штука как - отладчик. Насколько я могу судить из своих познаний, там в некоторых IDE (том же PySharm) отличный отладчик, и есть фишка показывающая время action (исполнения) операции. Я этим не пользовался, не умею еще и рано мне, но я предполагаю , что можно пошагово прогонять программу и смотреть на результаты и анализ. Может это поможет определить “узкое” место вашего кода, где падает скорость (цикл, чтение и подобное).
Если написал бред - прошу просто проигнорировать, но критика приветствуется.
Офлайн
857
metotronВыполни там
Файл объемом в 500кВ парсится секунд 45
re.findall(pat, s) input('end')
Офлайн
0
хм…. удалил принт листа и все вдруг стало работать быстро - с чего это вдруг print так влияет
Отредактировано metotron (Авг. 22, 2015 03:25:55)
Офлайн
88
pat = r"MemTotal:\s+(\d+)\s+kB\s+MemFree:\s+(\d+)\s+kB\s+Buffers:\s+(\d+)\s+kB"
pat = r"MemTotal:\s+(\d+)\s+kB\s*[\r\n]+MemFree:\s+(\d+)\s+kB\s*[\r\n]+Buffers:\s+(\d+)\s+kB"
Отредактировано Shaman (Авг. 22, 2015 09:13:17)
Офлайн
857
ShamanНадо файл привести к нормальному виду, он явно там неправильно создан чем-то.
И не нужно никаких замен переводов строк.
Отредактировано py.user.next (Авг. 22, 2015 09:53:04)
Офлайн
88
Если данные будут разбираться не единожды, лучше учесть все случаи чем каждый раз заморачиваться с приведением к нормальному виду.
Отредактировано Shaman (Авг. 22, 2015 21:01:09)
Офлайн