Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2008 19:31:36

Axl
От:
Зарегистрирован: 2008-04-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Привет всем поситителям форума. На питоне програмирую только месяц, все ответы находил через гугл, но вот щас немного подзастрял.
Имеется к примеру файл test.ini в котором 2-е строчки:
test_a = blablabla
test_b = pp5o5knb
Нужно чтобы программа нашла в файле test.ini нужную строчку и отобразила только то что после “равно”
Пробывал нечто подобное)) не помогло ..

import wx
import re
import string

def read(self, event):
File = open (“test.ini”, ‘r’)
all_lines = File.readlines()
File.close ()
test_a = re.findall('(test_a=w+)', all_lines)
test_b = re.findall('(test_b=w+)', all_lines)
self.text_a.SetValue(test_a )
self.text_b.SetValue(test_b )

Спасибо



Отредактировано (Апрель 28, 2008 19:33:12)

Офлайн

#2 Апрель 28, 2008 19:55:33

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Если идти этим путем:

import re

data = file('test.ini').read()
match = re.search(r"test_a =(.*)$", data, re.MULTILINE)
if match:
test_a = match.group(1)

match = re.search(r"test_b =(.*)$", data, re.MULTILINE)
if match:
test_b = match.group(1)
Но есть и более эффективные =)



Отредактировано (Апрель 28, 2008 19:56:05)

Офлайн

#3 Апрель 29, 2008 04:07:28

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Поиск по файлу и отображение

Хорошо знать регулярные выражения!
А еще лучше хорошо знать стандартную библиотеку Питона! :) (Хотя бы ее)

from ConfigParser import ConfigParser
config = ConfigParser()
config.read('test.ini')
test_a = config.get('main', 'test_a')
Дальше - читать доку по ConfigParser

Только перепиши test.ini, чтобы выглядел как
[main]
test_a = blablabla
test_b = pp5o5knb
Группы (секциями их в документации называют) нужны…



Офлайн

#4 Апрель 29, 2008 12:47:47

hellt
От:
Зарегистрирован: 2008-03-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

если совсем прямолинейно, то

def GetVal(str):
for i in open(“f.ini”):
if str in i:
return i.rsplit(“=”)


print GetVal(“test_a”)



Офлайн

#5 Ноя. 23, 2011 10:02:17

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Не хочу создавать еще один тред.
Есть файл такого вида:

NameTable:
regexp1
regexp2
regexpN

NameTable1:
regexp1
regexp2
regexpN

NameTable2:
regexp1
regexp2
regexpN

Как написать чтобы он пробежался по файлу, нашел NameTable1 и вывел всё что ниже этого, но ДО NameTable2.

Таким образом можно будет сделать фильтр в моей программе по названию таблицы, а еще необходимо сделать фильтр по дате создания regexp'a - тут я вообще не представляю как это сделать…. Помогите пожалуйста, а то застрял.



Офлайн

#6 Ноя. 24, 2011 22:50:38

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

up



Офлайн

#7 Ноя. 25, 2011 11:56:12

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Простейшая задача же:

def get_regexp(input_file, table_name):
result = list()
store = False
with open(input_file) as fd:
for line in fd:
line = line.strip(' \n\r:')
if result and not line:
break
if line == table_name:
store = True
continue
if store:
result.append(line)
return result

print get_regexp('test_input', 'NameTable1')

Офлайн

#8 Ноя. 25, 2011 13:04:06

Soeti
От:
Зарегистрирован: 2011-09-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Отпишу здесь же.

Задача: вытащить arp таблицу в linux для последующего разбора.

def GetArp(search):
import re
try:
file=open("/proc/net/arp", "r")
except IOError as (errno, strerror):
print "cannot open file", IOError
return 0
for mystr in file:
Search= re.findall(ur"((?:[0-9]{1,3}\.){3}[0-9]{1,3}).+((?:[0-9a-z]{2}:){5}[0-9a-z]{2})", mystr)
print Search
Вывод идет вот такой:

[]  ------------> тут заголовок arp, поэтому пустой.
[('192.168.11.96', '34:18:04:5e:1f:50')]
[('192.168.4.68', '00:21:91:7d:5a:66')]
...
1.Как в этой функции красиво преобразовать вывод в словарь с ключем по маку?


UPD

Всё оказалось элементарно

     import re
Mdict={}
try:
file=open("/proc/net/arp", "r")
except IOError as (errno, strerror):
print "cannot open file", IOError
return 0
for mystr in file:
Search= re.findall(ur"((?:[0-9]{1,3}\.){3}[0-9]{1,3}).+((?:[0-9a-z]{2}:){5}[0-9a-z]{2})", mystr)
Mdict.update(Search)



Отредактировано (Ноя. 25, 2011 15:28:16)

Офлайн

#9 Ноя. 25, 2011 16:46:28

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

s0rg
Простейшая задача же:
def get_regexp(input_file, table_name):
result = list()
store = False
with open(input_file) as fd:
for line in fd:
line = line.strip(' \n\r:')
if result and not line:
break
if line == table_name:
store = True
continue
if store:
result.append(line)
return result

print get_regexp('test_input', 'NameTable1')
Я не увидел момента, чтобы он выводил текст ОТ NameTable1 ДО NameTable2 (не включая названия таблиц), покажите пожалуйста.



Офлайн

#10 Ноя. 25, 2011 18:00:27

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

~ cat test_input 
NameTable:
regexp1
regexp2
regexpN

NameTable1:
regexp1
regexp2
regexpN

NameTable2:
regexp1
regexp2
regexpN

~ ./test_proc.py
['regexp1', 'regexp2', 'regexpN']

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version