Форум сайта python.su
спасибо :)
а возможно ли преобразовать спискок в отдельные строки? Или лучше все операции над строками производить в теле функции, и потом уже получить список с необходимыми параметрами ?
Офлайн
помогите пожалуйста, оооочень прошу ;) как добиться того, чтобы из полученной строки, например,
['slovo1 slovo2', 'slovo3 slovo4', 'slovo5 slovo6', 'slovo7 slovo8', 'slovo9 slovo10', 'etc etc']
['slovo3 slovo4', 'slovo5 slovo6']
Офлайн
for x in your_list:
if 'slovo3' in x and 'slovo5' in x:print x
Отредактировано (Март 23, 2009 17:45:59)
Офлайн
да, но только чтоб отображалась целый блок (или целый кусок строки), начинающийся со слова ‘slovo3’,
думаю так легче, чтоб не выписывать каждое ‘slovo’
igor.kaistчет такой подход у меня так и не заработал… программа вообще не выдает никаких результатовfor x in your_list:
if 'slovo3' in x and 'slovo5' in x:print x
Офлайн
вообщем нагло взяв рецепты, указанные в этой теме А.Светловым, получается вот такое чудо
#!/usr/bin/python
import string
import re
ap = open('./kuku.map','r')
s = ap.xreadlines()
slovo3 = 'DATA'
slovo4 = 'NAME'
def parser():
result = None
while True:
line = yield result
result = None
line = line.strip()
if line.startswith('LAYER'):
block = []
name = None
while True:
block.append(line)
line = yield None
line = line.strip()
if line.startswith('NAME'):
lst = line.split()
lst.pop(0)
name = lst.pop(0)
if re.search('#[ ]*?NAME|#[ ]*?GROUP', line):
break
if string.find(line, 'DATA|TILEINDEX'):
pass
else:
break
if line.startswith('END'):
result = (name, block)
break
p = parser()
p.send(None)
#siter = iter(p.send(line))
#for x in s:
# ret = p.send(line)
# if ret:
# print x
for line in s:
ret = p.send(line)
for x in line:
if slovo3 in line and slovo4 in line:
print x
else:
print "asdaSD"
Офлайн
так вообщем весь этот скрипт совершенно не рабочий. попытка чтото смастерить полностью провалилась :(
если начать от самого начала, вот этот кусок
имея такой текст для обработки
LAYER
TYPE Raster
DATA slovo
END
LAYER
TYPE Polygon
DATA slovo
END
LAYER
TYPE Raster
DATA slovo
END
LAYER
TYPE Polygon
DATA slovo
END
if string.find(line, 'Raster') == -1: // типа, чтобы строки с 'TYPE Raster' вообще не выводились
break
else:
pass
Офлайн
Вывод-то где?
Приведенный код вообще ничего не выводит.
Офлайн
Невнимательно прочитали что такое break.
Вы заканчиваете цикл, а надо просто пропустить итерацию. Для этого есть continue.
Офлайн
ну вообщем то долго мучаюсь, но прогресс замечаю :) только мало времени, однако, отдаю программированию. ладно…
еще такой маленький вопрос, вот я тут хитрю с модулем re ,
if re.search('#[ ]*GROUP|#[ ]*Group|#[ ]*NAME|#[ ]*Name', line): break
....
....
else .... тут все работает :)
if re.search('PRIWET', line): break # не работает :*
else:
....
....
if not string.find(line, 'PRIWET'): print 'baskdsad' # а в таком случае все равно выводит строку где слова ПРИВЕТ нету :/
else: # хотя и печатает на выходе 'baskdsad'
...
...
Отредактировано (Апрель 7, 2009 22:11:57)
Офлайн
gelo
Вы не понимаете основ программирования и бинарной логики. Вот с них и начните.
Кроме того re.search не возвращает булевого значения, так что запись некорректна.
Офлайн