Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2013 18:51:11

Sanya222
Зарегистрирован: 2013-04-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

Здравствуйте, я в программировании что то знаю, но я больше знаком с РНР и 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

Видим что они в таком виде: год дата время ип-адрес хз-что тип-запроса
Вообщем мне нужно что бы скрипт считал кол-во уникальных запросов, то есть если с одно ип 5 запросов то ин будет считаться за один.
Ну, думаю понятно, и надеюсь на помощь)

Офлайн

#2 Апрель 26, 2013 22:30:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

res=set()
with open("you.log","r") as f:
    for line in f:
        res.insert(line.split()[2])
print len(res)



Офлайн

#3 Апрель 26, 2013 22:51:09

elisk
Зарегистрирован: 2013-04-09
Сообщения: 35
Репутация: +  7  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

У множества нет 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)

Офлайн

#4 Апрель 27, 2013 07:14:17

Sanya222
Зарегистрирован: 2013-04-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

Ух ты, спасибо вам)
Ваще помогли)

Офлайн

#5 Апрель 27, 2013 10:08:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

elisk
У множества нет insert.
Да ошибся, издержки одновременного использования кучи языков и лень…

Но вообще считаю что это недостаток языка. Во многих языках есть контейнеры. Практически для всех контейнеров есть основная операция добавления элементов (которая используется в 90% случаев). Взять да назвать ее add для всех контейнеров но тут начинается
———————-
python:
set: add(v)
list: append(v)
dict: a[k]=v
———————-
c++:
set: insert(v) (собственно оно за несколько дней ударного программирования на c++)
list: push_back(v)
dict(map): a[k]=v
———————-
c#:
set: System.Collections.Generic.HashSet.Add(v)
list: Add(v)
Dictionary: a[k]=v
———————-
java
set:add(v)
list: add(v)
dict:put(k,v)

Итого:
желательно в языках для сходных операций использовать единые алиасы для сходных операций
set: add(v)
list: add(v)
dict: add((k,v))



Отредактировано doza_and (Апрель 27, 2013 16:51:16)

Офлайн

#6 Апрель 27, 2013 11:13:58

elisk
Зарегистрирован: 2013-04-09
Сообщения: 35
Репутация: +  7  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

doza_and
Итого:
желательно в языках для сходных операций использовать единые алиасы для сходных операций
set: add(v)
list: add(v)
dict: add((k,v))

Абсолютно с вами согласен.

Офлайн

#7 Апрель 27, 2013 12:05:37

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

Оффтоп на тему add().

Мне нравится как сделано в Python. В list - append() явно указывает, что добавление происходит в конец, а insert() - в определенную позицию. Для set add() как раз подходит.

А если бы в dict был add(), то что он должен делать если ключ уже существует? В .Net у Dictionary есть Add(), который выбрасывает исключение в этом случае. Сомневаюсь, что такое поведение нужно в Python.

Кстати, set в .Net - это HashSet и у него есть Add().

Офлайн

#8 Апрель 27, 2013 16:53:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Нужна помощь в написании скрипта

reclosedev
Кстати, set в .Net - это HashSet и у него есть Add().
Поправил. Спасибо а то проглядел. Я подумал что это SortedList, но это был не он. Правда неудовлетворенность c# все равно осталась. std::set использует операцию < для осуществления поиска, HashSet не является его полным аналогом.
reclosedev
А если бы в dict был add(), то что он должен делать если ключ уже существует?
Тоже самое что делает a=v - заменять значение.



Отредактировано doza_and (Апрель 27, 2013 17:10:53)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version