Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 14

Как составить скрипт на Питон, на входе которого журнал провайдера со следующими данными

14.06.2013, 09:33. Показов 1477. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дата время IP-адрес объем скач. информации
14.06.13 21.15 98.01.12.24 1
13.06.13 21.10 11.01.12.24 2
13.06.13 21.25 98.01.12.24 3
13.06.13 21.35 98.01.12.24 4

На выходе число запросов на дату 13.06.13 с каждого IP адреса.

Извините за наглость((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2013, 09:33
Ответы с готовыми решениями:

Софт записывающий в журнал текущий IP от провайдера
Ищу софт, который будет в фоне вести журнал IP-адресов. Важны всего два параметра: IP адрес, дата и время. Принцип работы примерно...

Создать класс, на входе которого Rectangle на выходе которого bool
Не получается создать класс, на входе которого Rectangle на выходе которого bool public bool collidesWithLevel(Rectangle rect). ...

Как запустить питон-скрипт на сервере?
Недавно написал вк-бота на питоне. Теперь хочу запустить его на сервере, чтобы он работал нон-стоп. Подскажите, как это сделать?

11
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.06.2013, 11:12
Mожно попрбовать типо gpoup_by, получите словарь, или ручками, просто перебор. В каком виде вы получаете данные?
2
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 14
14.06.2013, 11:29  [ТС]
на выходе должен получить txt файл с такими данными

Date Time IP объем скач. информации
05.05.13 21.10 11.01.12.24 2
05.05.13 21.25 98.01.12.24 3
05.05.13 21.35 98.01.12.24 4
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.06.2013, 11:50
Не на выход, а на вход, в каком формате?
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 14
14.06.2013, 12:00  [ТС]
txt

Добавлено через 1 минуту
нашел код но на выход не выдает ответ
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# coding: windows-1251
""" Скрипт преобразование Мебиуса """
import os
from numpy import *
from copy import *
from scipy import linalg as sla
import time
import sys
import matplotlib.pyplot as plt
 
infile = open('test.txt', 'r')
table = []
p=4
n=0
a='    Date     Time     IP       объем скач. информации'
for line in infile:
    try:
        words=line.split()
        numbers=[float(w) for w in words]
        if len(numbers)==p:
            table.append(numbers)
            n+=1
        else:
              print numbers
    except:
        print words
        continue
print 'Число запросов на дату 05.05.13 с каждого ip'
for i in range(n):
    for j in range(p):
        print  "%1.0e" % table[i][j],
    print
 
outfile = open('f_table.txt', 'w')
outfile.write(a+'\n')
for row in table:
    for column in row:
        outfile.write('%9.2f'  % column)
    outfile.write('\n') 
outfile.close()
Добавлено через 3 минуты
ой извините вот данные на входе
04.05.13 21.15 98.01.12.24 1
05.05.13 21.10 11.01.12.24 2
05.05.13 21.25 98.01.12.24 3
05.05.13 21.35 98.01.12.24 4
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.06.2013, 15:05
Не работает хотя бы потому, что вы всё распаршенное хотите в float переделать. А дату с двумя точками внутри вы не сможете переделать.

Простейший алгоритм, который приходит в голову: 1) считать данные; 2) обработать данные; 3) записать результат в файл. Соответственно, ожидается минимум три функции.

1) Сначала пишете функцию, которая будет читать данные из файла: for line in f и splitите line. В число достаточно переделать только объём. Для дат и времени подошли бы специальные структуры из библиотеки datetime, но вам и строк, наверно, хватит. Самый простой способ хранения информации - списком кортежей, который и будет на выходе.

2) Обрабатываете полученный список. Раз у вас результаты идентифицируются своими ip, логично результат складывать в словарь с ключами-ip.

3) Записываете данные из словаря в файл: итерируете словарь и format в помощь.

Работу с файлами предпочтительно осуществлять через with open(...) as .... Используйте эту конструкцию, если у вас нет веских причин поступить иначе.

Если у вас настолько огромные базы данных, что вы боитесь поместить в память содержимое всего файла, можно попробовать сделать, чтобы первая функция возвращала не список, а итератор.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
15.06.2013, 18:50
Самый простой вариант, если не проверять содержимое входного файла и аргументы скрипта на корректность:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import sys
 
def main(argv=None):
    if argv == None:
        argv = sys.argv
 
    if len(argv) != 3:
        sys.exit("Usage: DATE LOGFILE")
 
    date, logfile = argv[1:]
    date_len = len(date)
 
    with open(logfile) as log:
        for line in log:
            if line[0:date_len] == date:
                print line.rstrip()
 
if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        sys.exit(e)
0
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
15.06.2013, 19:01
# coding: utf-8
text = '''14.06.13 21.15 98.01.12.24 1
14.06.13 21.15 98.01.12.25 1
14.06.13 21.15 98.01.12.25 1
13.06.13 21.10 11.01.12.24 2
13.06.13 21.25 98.01.12.24 3
13.06.13 21.35 98.01.12.24 4'''

result = {}
for data in text.splitlines():
time, date, ip, size = data.split()
result.setdefault(date, {})
result[date].setdefault(ip, 0)
result[date][ip] += 1

for date in result:
print u'На дату %s, такая статистика' %date
for ip, count in result[date].items():
print u'ip %s: запросов %d' %(ip, count)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
15.06.2013, 19:11
ilnurgi, если решать со словарями, то удобнее и эффективнее использовать defaultdict и Counter:

Python
1
2
3
4
5
6
7
8
9
from collections import defaultdict, Counter
 
# text = ...
 
result = defaultdict(Counter)
 
for data in text.splitlines():
    date, time, ip, size = data.split()
    result[date][ip] += 1
2
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
15.06.2013, 19:15
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
text = '''14.06.13 21.15 98.01.12.24 1
14.06.13 21.15 98.01.12.25 1
14.06.13 21.15 98.01.12.25 1
13.06.13 21.10 11.01.12.24 2
13.06.13 21.25 98.01.12.24 3
13.06.13 21.35 98.01.12.24 4'''
 
result = {}
for data in text.splitlines():
    time, date, ip, size = data.split()
    result.setdefault(date, {})
    result[date].setdefault(ip, 0)
    result[date][ip] += 1
 
for date in result:
    print u'На дату %s, такая статистика' %date
    for ip, count in result[date].items():
        print u'ip %s: запросов %d' %(ip, count)
забыл отформатировать.
Nameless One, спасибо. пока у меня руки не доходили до них. спасибо за пример. буду чаще практиковаться
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.06.2013, 20:18
Python
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
 
ifname = 'file.txt'
date = '13.06.13'
 
with open(ifname, encoding='utf-8') as fin:
    dates = [line.rstrip() for line in fin
             if line.split(None, 1)[0] == date]
print(*dates, sep='\n')
Code
1
2
3
4
5
[guest@localhost selip]$ ./selip.py 
13.06.13 21.10 11.01.12.24 2
13.06.13 21.25 98.01.12.24 3
13.06.13 21.35 98.01.12.24 4
[guest@localhost selip]$
0
 Аватар для t1m0n
638 / 416 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
18.06.2013, 00:41
еще вариант что то типа
Python
1
2
for row in csv.DictReader(ff,delimiter=' ',fieldnames=("Дата","время"," IP-адрес","объем скач. информации")):
    print (dict(row))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2013, 00:41
Помогаю со студенческими работами здесь

Создать класс регион со следующими данными
Создать класс регион со следующими данными: название обл., Кол-во жителей, площадь, кол-во учебных заведений, кол-во промышленных...

Как создать sqlite3 скрипт через питон?
Создать скрипт который : по введенному имени пользователем создает базу данный создать одну таблицу название и сами колонки...

Нужно улучшить скрипт на распаковку файлов (Питон скрипт)
Мне нужна помощь. В интернете я нашёл нужный скрипт, но функционал хотелось бы улучшить В этом скрипте мне нужно сделать счётчик...

Написать скрипт в Python, со следующими функциями:
Автоматическое добавление произвольных строк в таблицу «f». Строки генерировать автоматически случайным образом. Возможные значения внешних...

Описать класс TRAIN, реализующий однонаправленный линейный список для работы со следующими данными:
задание: 1. Описать класс TRAIN, реализующий однонаправленный линейный список для работы со следующими данными: • номер поезда; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru