Форум сайта python.su
Всем привет, прошу помочь по возможности. Я недавно начал изучать python, язык нравится, только вот обстоятельства требуют как можно быстрей а времени мало. Вообщем, имеется файл с тексом, что то типа
BONGO
NAME text
TYPE tozeText
FILTER kakojnitTip
END
...
...
[всякая всячина]
...
...
BONGO
NAME text2
TYPE tozeText2
FILTER kakojnitTip2
END
Офлайн
Тут дело не в документации, а в логике :)
Нет таких волшебных функций, на все случаи жизни, которые делают именно то что нужно.
“в лоб”:
for x in text.split('BONGO')[1:]:
print x.split('END')[0].split('NAME ')[1].split('\n')[0]
Отредактировано (Март 3, 2009 14:47:03)
Офлайн
спасибо, будем разбираться, в особенности в последней строке :)
я тут пробовал через операторы 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 ' '
Офлайн
содержимое файла 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)
['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
('text2', ['BONGO', 'BONG', 'NAME text2', 'TYPE tozeText2', 'FILTER kakojnitTip2'])
('tedsdsxt2', ['BONGO', 'BONG', 'NAME tedsdsxt2', 'TYPE tozeText2', 'FILTER kakojnitTip2'])
Офлайн
регулярные выражения конечно рулят, но я их еще не юзал, а вот словари - уже успел ))
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"
Hello, World
Goodbye, World
File "<stidn>", line 1
c:\test\python helloworld.py
^
SyntaxError: invalid syntax
Отредактировано (Март 5, 2009 16:12:55)
Офлайн
Сейчас угадаю… У тебя python 3.x а примеры для python 2.x
Для python 3 нужно
print('hello world')
Отредактировано (Март 5, 2009 16:23:27)
Офлайн
igor.kaistВообще то примеры для 1.5.2)))) А у меня есть 3.0.1 и 2.5.0
Офлайн
НовичекВсе круче - Новичек пытается запустить питон из питоновского же шелла, хотя нужно из коммандной строки.
File “<stidn>”, line 1 c:\test\python helloworld.py ^ SyntaxError: invalid syntax
Офлайн