Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 20, 2010 12:12:55

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Привет, пусть находит первую строку, вообще это исключительные случай где 2 мака, т.к. маки клиентские повторяющихся нет, мы их будем игнорировать.



Офлайн

#2 Янв. 20, 2010 18:47:36

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Тогда так:

def findinfo(mac):
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
if not '#' in line and mac in line:
return line
А наверху обрабатывать так:
data = findinfo(mac)
if data:
ip = data.split()[0]
name = data.split()[-1]
else:
ip = "!<Not registered on dhcp server>!"
name = ''
Я уже говорил, что код выглядит ужасно? Не хочешь улучшить? Могу помочь.



Офлайн

#3 Янв. 20, 2010 19:19:00

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Ed
Тогда так:
def findinfo(mac):
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
if not '#' in line and mac in line:
return line
А наверху обрабатывать так:
data = findinfo(mac)
if data:
ip = data.split()[0]
name = data.split()[-1]
else:
ip = "!<Not registered on dhcp server>!"
name = ''
Я уже говорил, что код выглядит ужасно? Не хочешь улучшить? Могу помочь.
Если не сложно буду рад и благодарен за одно и поучусь.
python show_mac.py
Input switch NAME or IP address:mon3-33
PORT VLAN TYPE MAC ADDRESS IP ADDRESS NAME
-----------------------------------------------------------------
26 11 dynamic 00:14:85:28:d8:86 10.0.255.254 all-gateway
Traceback (most recent call last):
File "show_mac.py", line 65, in <module>
dmac()
File "show_mac.py", line 48, in dmac
data = findinfo(mac)
File "show_mac.py", line 60, in findinfo
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
File "/usr/lib/python2.6/fileinput.py", line 102, in input
raise RuntimeError, "input() already active"
RuntimeError: input() already active



Офлайн

#4 Янв. 20, 2010 21:27:35

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

avdoshkin
Если не сложно буду рад и благодарен за одно и поучусь.
программа в текущем состоянии выглядит как монолит. Для начала подумай как ее разбить на отдельные функционально законченные куски, например: присоединение к коммутатору, получение данных от коммутатора, обработка данных, вывод результатов.

RuntimeError: input() already active
Тогда можем вернуться к тому варианту, что я предлагал, без fileinput:
def findinfo(mac):
for fname in glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'):
for line in open(fname):
if not '#' in line and mac in line:
return line
Либо нужно закрыть объект fileinput:
def findinfo(mac):
finput = fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'))
for line in finput:
if not '#' in line and mac in line:
finput.close()
return line



Офлайн

#5 Янв. 21, 2010 10:27:33

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.



Офлайн

#6 Янв. 21, 2010 10:40:04

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Ed
На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.
Ed, по стилю немного не понятно, что ты имел в виду, т.к. опыта совсем мало по написанию. на самом деле так и пишу ‘что вижу, то пою’. Если не сложно поясни прописные истины. Что не так в скрипте, немного ты пояснял, если есть еще комментарии поясни пожалуйста.



Офлайн

#7 Янв. 21, 2010 11:22:53

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Я же пару постов назад предложил направление мысли. Жду реакции в виде кода.



Офлайн

#8 Янв. 21, 2010 12:49:14

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Ed
Я же пару постов назад предложил направление мысли. Жду реакции в виде кода.
Замерил время выполнения своего скрипта но с разными функциями, результат:

def findinfo(mac):
finput = fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'))
for line in finput:
if not '#' in line and mac in line:
finput.close()
return line


Время обработки 0m11.805s

def findinfo(mac):
for fname in glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'):
for line in open(fname):
if not '#' in line and mac in line:
return line

Время обработки 0m5.836s
просто так показал.



Офлайн

#9 Янв. 21, 2010 14:00:30

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Если прекратить эту странную практику для каждой строки читать все файлы, то работать будет намного быстрее.



Офлайн

#10 Янв. 29, 2010 18:15:17

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Всем привет!
Есть строка вида a = ‘1-6,8-23,25-26’
как описать с помощью инструкций: если есть “-”, то делать по нему сплит, получить 2 числа - начало и конец отрезка и цикл от начала до конца в результате получить следующие:
1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version