Уведомления

Группа в Telegram: @pythonsu

#1 Март 17, 2009 10:31:10

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

Раобта со строками

спасибо :)
а возможно ли преобразовать спискок в отдельные строки? Или лучше все операции над строками производить в теле функции, и потом уже получить список с необходимыми параметрами ?



Офлайн

#2 Март 23, 2009 13:22:11

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

Раобта со строками

помогите пожалуйста, оооочень прошу ;) как добиться того, чтобы из полученной строки, например,

['slovo1 slovo2', 'slovo3 slovo4', 'slovo5 slovo6', 'slovo7 slovo8', 'slovo9 slovo10', 'etc etc']
выписывалось с помошью print только поле, где есть slovo3 и slovo5, но не выписывалилсь остальные поля, т.е.
['slovo3 slovo4', 'slovo5 slovo6']
надеюсь вопрос мой не дерзок ;) о величайшие гуру

(merci)



Офлайн

#3 Март 23, 2009 17:42:56

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Раобта со строками

for x in your_list:
if 'slovo3' in x and 'slovo5' in x:print x
что то типа этого?
P.S. В твоем примере не строка, а список, который содержит строки…



Отредактировано (Март 23, 2009 17:45:59)

Офлайн

#4 Март 24, 2009 11:19:43

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

Раобта со строками

да, но только чтоб отображалась целый блок (или целый кусок строки), начинающийся со слова ‘slovo3’,
думаю так легче, чтоб не выписывать каждое ‘slovo’

igor.kaist
for x in your_list:
if 'slovo3' in x and 'slovo5' in x:print x
чет такой подход у меня так и не заработал… программа вообще не выдает никаких результатов



Офлайн

#5 Март 24, 2009 11:31:28

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

Раобта со строками

вообщем нагло взяв рецепты, указанные в этой теме А.Светловым, получается вот такое чудо

#!/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"
тут мне вылазят одни “asdaSD”
a поменяв на закоментированнык блок выдает слишком много инфы. мне б только определенные куски в отдельных строках

(merci)



Офлайн

#6 Март 25, 2009 14:05:44

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

Раобта со строками

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

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
выдаеться лишь строка , что в принципе и не плохо, но таких строк там две. И не могу понять почему вторую строчку с ‘TYPE Polygon’ не показывает. Подскажет ли ктонить с этим?



Офлайн

#7 Март 26, 2009 11:03:10

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

Раобта со строками

Вывод-то где?
Приведенный код вообще ничего не выводит.



Офлайн

#8 Март 26, 2009 13:29:47

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Раобта со строками

Невнимательно прочитали что такое break.
Вы заканчиваете цикл, а надо просто пропустить итерацию. Для этого есть continue.

Офлайн

#9 Апрель 7, 2009 22:09:05

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

Раобта со строками

ну вообщем то долго мучаюсь, но прогресс замечаю :) только мало времени, однако, отдаю программированию. ладно…
еще такой маленький вопрос, вот я тут хитрю с модулем re ,

if re.search('#[ ]*GROUP|#[ ]*Group|#[ ]*NAME|#[ ]*Name', line): break
....
....
else .... тут все работает :)
а как вот написать с помощью такого модулю проверку, что если в строке (line) нету слова ПРИВЕТ, пропускать ее

(надеюсь я не трудно описал чего бы хотелось)

я пытался вот так
if re.search('PRIWET', line): break  # не работает :*
else:
....
....
и

if not string.find(line, 'PRIWET'): print 'baskdsad'    # а в таком случае все равно выводит строку где слова ПРИВЕТ нету :/
else: # хотя и печатает на выходе 'baskdsad'
...
...
вообще если честно нигде толком не прочитал о IF NOT :/

(cheeeeers :) )



Отредактировано (Апрель 7, 2009 22:11:57)

Офлайн

#10 Апрель 8, 2009 00:00:00

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Раобта со строками

gelo
Вы не понимаете основ программирования и бинарной логики. Вот с них и начните.
Кроме того re.search не возвращает булевого значения, так что запись некорректна.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version