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

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

14.06.2013, 09:33. Показов 1454. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru