Найти - Пользователи
Полная версия: Раобта со строками
Начало » Python для новичков » Раобта со строками
1 2 3 4
gelo
Всем привет, прошу помочь по возможности. Я недавно начал изучать python, язык нравится, только вот обстоятельства требуют как можно быстрей а времени мало. Вообщем, имеется файл с тексом, что то типа
BONGO 
NAME text
TYPE tozeText
FILTER kakojnitTip
END
...
...
[всякая всячина]
...
...
BONGO
NAME text2
TYPE tozeText2
FILTER kakojnitTip2
END
]

BONGO всегда заканчивается словом END, и таких кусков в файле множество. А задача следующая:

Найти блок начинающийся словом БОНГО, определить текст в константе NAME, и если текст соответствует требуемому, куданить его записать. А если не соответствует то идти искать следующий код BONGO …. END

Я вот никак не могу понят принцип посика слов, и как мне поблочно (BONGO / END) передвигаться в файле.


Буду признателен за любой совет.

Что касается документации, читал, анго и русскоязычную но так и не понял :(

Олег
igor.kaist
Тут дело не в документации, а в логике :)
Нет таких волшебных функций, на все случаи жизни, которые делают именно то что нужно.
“в лоб”:
for x in text.split('BONGO')[1:]:
print x.split('END')[0].split('NAME ')[1].split('\n')[0]
Уверен, что кто нибудь предложит и более элегантное решение, а потом еще кто нибудь предложит еще одно решение, а потом кто нибуть на регулярках напишет код :)
gelo
спасибо, будем разбираться, в особенности в последней строке :)

я тут пробовал через операторы for if else

#!/usr/bin/python

fo = open("profile.brr", "r")
tx = fo.xreadlines()

var_lay = "LAYER"
var_data = "DATA"
var_tile = "TILEINDEX"
var_type = "TYPE"

for line in tx:
if line.startswith(var_lay):
fo.readline() тут не знаю как писать :(
if line.startswith(var_type):
print ' '
else:
print ' '
else:
print ' '
только не уверен если я иду в правильном направлении
test157
содержимое файла in.txt
BONGO 
BONG
NAME text2
TYPE tozeText2
FILTER kakojnitTip2
END
fds
fs
df
sdf
sdf
sd
f
sdf
s
dfsdfsd
BONGO
BONG
NAME tedsdsxt2
TYPE tozeText2
FILTER kakojnitTip2
END
скрипт:
import re

s = re.findall(r'BONGO(?:(?!BONGO|END).)+NAME\s*([^\n\r]+)(?:(?!BONGO|END).)+END', open('in.txt').read(), re.S)
содержимое s:
['text2', 'tedsdsxt2']
Андрей Светлов
Генераторы - наше все.
s = '''
BONGO
BONG
NAME text2
TYPE tozeText2
FILTER kakojnitTip2
END
fds
fs
df
sdf
sdf
sd
f
sdf
s
dfsdfsd
BONGO
BONG
NAME tedsdsxt2
TYPE tozeText2
FILTER kakojnitTip2
END
'''

def parser():
result = None
while True:
line = yield result
result = None
line = line.strip()
if line.startswith('BONGO'):
block = []
name = None
while True:
block.append(line)
line = yield None
line = line.strip()
if line.startswith('NAME'):
const, text = line.split()
name = text
if line.startswith('END'):
result = (name, block)
break


p = parser()
p.send(None)
for line in s.split('\n'):
ret = p.send(line)
if ret:
print ret
Output:
('text2', ['BONGO', 'BONG', 'NAME text2', 'TYPE tozeText2', 'FILTER  kakojnitTip2'])
('tedsdsxt2', ['BONGO', 'BONG', 'NAME tedsdsxt2', 'TYPE tozeText2', 'FILTER kakojnitTip2'])
Обратите внимание, что обработчик найденого блока может быть куда более сложным
kostyasa
регулярные выражения конечно рулят, но я их еще не юзал, а вот словари - уже успел ))

ap = open('./1.txt','r').read()

mydict = ['text','text2']
ok = {}
for i in range(len(ap.split('BONGO'))):
if ap.split('BONGO')[i] == '': continue
sp = ap.split('BONGO')[i].split('END')[0].strip()
text = {}
for i2 in sp.split('\n'):
i2 = i2.strip()
if filter(lambda x:i2.startswith(x),'NAME'):
name = i2.split(' ')[1]
if name in mydict:
ok.setdefault(name,[])
continue
infa = i2.split(' ')[1]
if infa == '':
try:
infa = i2.split(' ')[2]
except:
infa = 'not data'
text.setdefault(i2.split(' ')[0],[])
text[i2.split(' ')[0]] = infa
ok[name] = text

for k,v in ok.items():
print k,v
Новичек
Привет всем. Я толко начал изучать Python. У меня есть книга “Язык Python для начинающих”, в ней есть начальные примеры, и от один из них который мне не удаётса выполнить: Разкройте окно своего редактора (текстовый редактор Блокнот) и введите следующий код:
print "Hello, World"
print "Goodbye, World"
Сохраните ети строки в текстовом файле под названием helloworld.py, откройте окно DOS (или другое окно терминала) и сделайте текущим тот каталог, где вы сохранили файл. Введите в окне терминала строку python helloworld.py и посмотрите, что произойдет. Должно получитса
Hello, World
Goodbye, World
А у меня
  File "<stidn>", line 1  
c:\test\python helloworld.py
^
SyntaxError: invalid syntax
В чем проблема незнаю.( Может нехватает чегото? Help
igor.kaist
Сейчас угадаю… У тебя python 3.x а примеры для python 2.x
Для python 3 нужно
print('hello world')
Мои совет, начни изучение с 2.6.1, все примеры подойдут.
P.S. Эх… Как и ожидалось, сыпятся вопросы от новичков по поводу python 3
Новичек
igor.kaistВообще то примеры для 1.5.2)))) А у меня есть 3.0.1 и 2.5.0
ZAN
Новичек
File “<stidn>”, line 1 c:\test\python helloworld.py ^ SyntaxError: invalid syntax
Все круче - Новичек пытается запустить питон из питоновского же шелла, хотя нужно из коммандной строки.
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