powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Python) Поиск по файлу
6 сообщений из 6, страница 1 из 1
(Python) Поиск по файлу
    #39279773
zap22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите упростить код, чтобы он быстро работал.

Нужно в текстовом файле найти идентификатор со словом connected и идентификатор со словом disconnected и вычислить время обработки.

Пример файла
2016-07-12 03:12:33.187 connected 0xafffbfb0
2016-07-12 03:13:33.241 connected 0x2730eb9d
2016-07-12 03:14:33.377 disconnected 0xafffbfb0
2016-07-12 03:15:33.505 connected 0x1284e508
2016-07-12 03:16:33.487 disconnected 0x1284e508
2016-07-12 03:17:33.525 disconnected 0x2730eb9d

Вот мой код, но работает он долго (файлы порядка 20Мб). В моем понимании надо работать с одним файлом не переоткрывая его (меняя указатель строки).

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
f = open('D:/22/piton/input.txt')
from datetime import datetime
for line in f:
    if "connected" in line:
        f1 = open('D:/22/piton/input.txt')
        for line2 in f1:
            if "disconnected "+line[34:44] in line2:
                date_object = datetime.strptime(line[0:23],'%Y-%m-%d %H:%M:%S.%f')
                date_object2 = datetime.strptime(line2[0:23],'%Y-%m-%d %H:%M:%S.%f')
                mil_second=date_object2-date_object
                print(line[34:44]," ",line[0:23]," ",line2[0:23],"Time:",(mil_second.seconds*1000+mil_second.microseconds/1000)/1000)
                f1.close()
                break
f.close()



Результат:
0xafffbfb0 2016-07-12 03:12:33.187 2016-07-12 03:14:33.377 Time: 120.19
0x2730eb9d 2016-07-12 03:13:33.241 2016-07-12 03:17:33.525 Time: 240.284
0x1284e508 2016-07-12 03:15:33.505 2016-07-12 03:16:33.487 Time: 59.982
...
Рейтинг: 0 / 0
(Python) Поиск по файлу
    #39279777
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж.
Один проход делай и складывай данные в словарь в виде
0xafffbfb0: {connected: datetime, disconnected:datetime}
потом уже работай с данными
...
Рейтинг: 0 / 0
(Python) Поиск по файлу
    #39279780
zap22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

Помоги с кодом, плиз
...
Рейтинг: 0 / 0
(Python) Поиск по файлу
    #39280048
zap22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
f = open('D:/22/piton/input.txt')
from datetime import datetime
a = []
i=0
for line in f:
    if " connected" in line:
        z=line[34:44]+','+line[0:23]
        a.append(z)
    if "disconnected" in line:
        j=0
        for j in range(len(a)):
            if line[37:47] in a[j]:
                a[j]=a[j]+','+line[0:23]
                break
f.close()
for k in range(len(a)):
    if len(a[k])<58:
        continue
    date_object = datetime.strptime(a[k][11:34],'%Y-%m-%d %H:%M:%S.%f')
    date_object2 = datetime.strptime(a[k][35:58],'%Y-%m-%d %H:%M:%S.%f')
    mil_second=date_object2-date_object
    print(a[k],"Time:",(mil_second.seconds*1000+mil_second.microseconds/1000)/1000)


Сам написал.
Может еще есть лучше вариант?
...
Рейтинг: 0 / 0
(Python) Поиск по файлу
    #39280177
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zap22,
жуткий говнокод

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import datetime
from collections import defaultdict

dct = defaultdict(lambda: [None, None])

with open("s.txt") as f:
    for line in f:
        time, action, id = line.rsplit(" ", 2)
        time = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M:%S.%f")
        id = id.strip()
        action = action.strip()
        if action == "connected":
            dct[id][0] = time
        else:
            dct[id][1] = time

for id, (start, end) in dct.items():
    print("Id={} start={} end={} delta={}".format(id, start, end, end-start if start and end else "Unknown"))
...
Рейтинг: 0 / 0
(Python) Поиск по файлу
    #39280247
zap22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FishHook,
Спасибо за помощь.

>>жуткий говнокод
Про существование питона я узнал 2 дня назад.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Python) Поиск по файлу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]