Найти - Пользователи
Полная версия: Чтение всех файлов
Начало » Python для новичков » Чтение всех файлов
1 2 3 4
avdoshkin
Привет, пусть находит первую строку, вообще это исключительные случай где 2 мака, т.к. маки клиентские повторяющихся нет, мы их будем игнорировать.
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 = ''
Я уже говорил, что код выглядит ужасно? Не хочешь улучшить? Могу помочь.
avdoshkin
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
Ed
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
Ed
На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.
avdoshkin
Ed
На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.
Ed, по стилю немного не понятно, что ты имел в виду, т.к. опыта совсем мало по написанию. на самом деле так и пишу ‘что вижу, то пою’. Если не сложно поясни прописные истины. Что не так в скрипте, немного ты пояснял, если есть еще комментарии поясни пожалуйста.
Ed
Я же пару постов назад предложил направление мысли. Жду реакции в виде кода.
avdoshkin
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
просто так показал.
Ed
Если прекратить эту странную практику для каждой строки читать все файлы, то работать будет намного быстрее.
avdoshkin
Всем привет!
Есть строка вида 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB