Форум сайта python.su
0
Всем ку!
Подскажите, необходимо спарсить файлы лога, вытащив из них имя домена. Всё, что я знаю про название домена - оно длинное, гораздо длиннее днс-имени. Каждая из строк представляет из себя конструкцию формата Днс1 Домен Днс2 Домен Днс3 Домен, то есть строки, состоящей из разных по длине слов, но где самым длинным слово является имя домена, соответственно логично вытащить его по длине.
Есть вот такой скрипт:
with open("somefile.txt", "r") as o: for i in range(числострок): a = o.readline().split() print max(a, key = len)
with open("somefile.txt", "r") as o: perDl = len(o.readlines()) for i in range(perDl): a = o.readline().split() print max(a, key = len)
Офлайн
6
Задачу принципиально надо решить кодом ?
Если нет, то быстрее вытащить используя grep,awk,sed.
Приведите пример хотя бы одной фейковой строки.
Офлайн
0
papuasНе особо принципиально, но у меня уже это вопрос принципа:3 Интересен механизм возникновения этого исключения.
Задачу принципиально надо решить кодом ?
papuasuser1 somedomainworkplace ru user2 somedomainworkplace ru admin somedomainworkplace ru somedomainworkplace somedomainworkplace ru user1 somedomainworkplace ru ru somedomainworkplace user1 user2
Приведите пример хотя бы одной фейковой строки.
Офлайн
857
pffpffНу, ты просто прочитал весь файл, когда вызвал .readlines(), а после этого внутренний указатель файла остался в конце. При этом список строк, возвращённый из .readlines(), ты использовал только для вычисления длины, хотя из него можно и строки брать. Но даже это не нужно, потому что читать файл целиком в память не принято.
Не особо принципиально, но у меня уже это вопрос принципа:3 Интересен механизм возникновения этого исключения.
with open('file.txt', encoding='utf-8') as fin: for line in fin: print(line)
with open('file.txt') as fin: for line in fin: print line
Офлайн
253
pffpff
Интересен механизм возникновения этого исключения.
>>> print max([], key = len) Traceback (most recent call last): File "<interactive input>", line 1, in <module> ValueError: max() arg is an empty sequence
Офлайн
6
pffpffи
Днс1 Домен Днс2 Домен Днс3 Домен
pffpffразличаются
user1 somedomainworkplace ru user2 somedomainworkplace ru admin somedomainworkplace ru somedomainworkplace somedomainworkplace ru user1 somedomainworkplace ru ru somedomainworkplace user1 user2
# grep -Po '\w+(?=\sru)' test.txt
somedomainworkplace
>>>import re >>>input_data = '/home/test.txt' >>> with open(input_data, 'r') as o: ... for line in o: ... m = re.findall('\w+(?=\sru)', line) ... print m ... ['somedomainworkplace', 'somedomainworkplace', 'somedomainworkplace', 'somedomainworkplace'] >>>
Отредактировано papuas (Июль 29, 2016 14:12:53)
Офлайн