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

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

14.06.2013, 09:33. Показов 1464. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru