Форум сайта python.su
0
Здравствуйте, я в программировании что то знаю, но я больше знаком с РНР и pawn, а вот с python….
Вообщем, есть скрипт, который делает свое дело…. Ну и в периоде его работы записываются логи в отдельный файл.
А мне нужно написать скрипт который будет читать эти логи, и подсчитывать количество уникальных запросов.
То есть, логи такого вида:
2013-04-26 18:06:43 92.125.45.163 56196 cs 2013-04-26 18:06:43 92.125.45.163 56196 cs 2013-04-26 18:22:53 109.207.122.131 2215 cs
Офлайн
253
res=set() with open("you.log","r") as f: for line in f: res.insert(line.split()[2]) print len(res)
Офлайн
7
У множества нет insert. Лучше использовать add
#-*- coding: utf-8 -*- res=set() with open("you.log","r") as f: for line in f: res.add(line.split()[2]) print len(res) print list(res)
Офлайн
0
Ух ты, спасибо вам)
Ваще помогли)
Офлайн
253
eliskДа ошибся, издержки одновременного использования кучи языков и лень…
У множества нет insert.
set: add(v) list: append(v) dict: a[k]=v
set: insert(v) (собственно оно за несколько дней ударного программирования на c++) list: push_back(v) dict(map): a[k]=v
set: System.Collections.Generic.HashSet.Add(v) list: Add(v) Dictionary: a[k]=v
set:add(v) list: add(v) dict:put(k,v)
Отредактировано doza_and (Апрель 27, 2013 16:51:16)
Офлайн
7
doza_and
Итого:
желательно в языках для сходных операций использовать единые алиасы для сходных операций
set: add(v)
list: add(v)
dict: add((k,v))
Офлайн
173
Оффтоп на тему add().
Мне нравится как сделано в Python. В list - append() явно указывает, что добавление происходит в конец, а insert() - в определенную позицию. Для set add() как раз подходит.
А если бы в dict был add(), то что он должен делать если ключ уже существует? В .Net у Dictionary есть Add(), который выбрасывает исключение в этом случае. Сомневаюсь, что такое поведение нужно в Python.
Кстати, set в .Net - это HashSet и у него есть Add().
Офлайн
253
reclosedevПоправил. Спасибо а то проглядел. Я подумал что это SortedList, но это был не он. Правда неудовлетворенность c# все равно осталась. std::set использует операцию < для осуществления поиска, HashSet не является его полным аналогом.
Кстати, set в .Net - это HashSet и у него есть Add().
reclosedevТоже самое что делает a=v - заменять значение.
А если бы в dict был add(), то что он должен делать если ключ уже существует?
Отредактировано doza_and (Апрель 27, 2013 17:10:53)
Офлайн