Найти - Пользователи
Полная версия: Нужна помощь в написании скрипта
Начало » Python для новичков » Нужна помощь в написании скрипта
1
Sanya222
Здравствуйте, я в программировании что то знаю, но я больше знаком с РНР и 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 запросов то ин будет считаться за один.
Ну, думаю понятно, и надеюсь на помощь)
doza_and
res=set()
with open("you.log","r") as f:
    for line in f:
        res.insert(line.split()[2])
print len(res)
elisk
У множества нет 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)
Sanya222
Ух ты, спасибо вам)
Ваще помогли)
doza_and
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))
elisk
doza_and
Итого:
желательно в языках для сходных операций использовать единые алиасы для сходных операций
set: add(v)
list: add(v)
dict: add((k,v))

Абсолютно с вами согласен.
reclosedev
Оффтоп на тему add().

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

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

Кстати, set в .Net - это HashSet и у него есть Add().
doza_and
reclosedev
Кстати, set в .Net - это HashSet и у него есть Add().
Поправил. Спасибо а то проглядел. Я подумал что это SortedList, но это был не он. Правда неудовлетворенность c# все равно осталась. std::set использует операцию < для осуществления поиска, HashSet не является его полным аналогом.
reclosedev
А если бы в dict был add(), то что он должен делать если ключ уже существует?
Тоже самое что делает a=v - заменять значение.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB