Форум сайта python.su
ZANНедоглядел :)
Все круче - Новичек пытается запустить питон из питоновского же шелла, хотя нужно из коммандной строки.
Офлайн
мда далековато мне еше до совершенства :)))
спасибо
Андрей Светловхотел бы спросить в Вашем примере переменная s(?) уже с текстом, а как сделать если я хочу хичитать из файла?
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
'''
Traceback (most recent call last):
File "./file1.f", line 51, in <module>
for line in s.split('\n'):
AttributeError: 'list' object has no attribute 'split'
Отредактировано (Март 9, 2009 10:50:12)
Офлайн
geloпросто
s = open('./file.f', ‘r’).xreadlines ili s = open('./file.f', ‘r’).readlines()
выдаютпонятно что такого обьекта нет, но вот как его создать ?Traceback (most recent call last):
File "./file1.f", line 51, in <module>
for line in s.split('\n'):
AttributeError: 'list' object has no attribute 'split'
а если оставить read() (это как я понимая чтение одной строки) то вывода никакого нет :/
Офлайн
readlines возвращает не строку, а список каждый элемент которого это новая строка.
Каждая строка почему то заканчивается “\n”. Хотя как по мне так разумно было бы исключать автоматически это дело.
Таким образом for line in open(filename).readlines(): dosomewith(line)
Так делаю я.
А как правильно расскажут более опытные товарищи.
Офлайн
Я делаю так:
fh = open(filename)
for line in fh:
dosomething(line)
fh.close()
with open(filename) as fh:
for line in fh:
dosomething(line)
Отредактировано (Март 9, 2009 14:04:09)
Офлайн
gelo, все делать примерно как Ed предлагает.
p = parser()
p.send(None)
for line in open(filename):
ret = p.send(line)
if ret:
print ret
Офлайн
for line in open(filename):
Офлайн
Ed Это не gc, а decref сразу же после окончания for loop. А файл открыт на чтение. Был бы на запись - я бы его тоже прикрыл. Для уверенности :)
Или если бы лежал в какой-то переменной - чтобы ограничить scope.
А так все очень просто - ты по нему пробежался, и от пропал. Совсем. Даже и закрывать нечего.
Офлайн
Андрей Светловvoobsem to uz koesto smasteril s predlozenym reseniem, tolko vot pojavilas strannyj nadpisi :D
Traceback (most recent call last):
File "./e3.py", line 37, in <module>
if re.search('#[ ]*?DATA|#[ ]*?TILEINDEX', ret):
File "/usr/lib/python2.5/re.py", line 142, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
Traceback (most recent call last):
File "./e3.py", line 35, in <module>
ret = p.send(line)
File "./e3.py", line 22, in parser
const, text = line.split()
ValueError: too many values to unpack
Офлайн
Вторая проблема.
Проверка идет на строки типа ‘FIELD_TYPE FIELD VALUE’
Если формат другой - ломается.
Чинить легко
Вместо
if line.startswith('NAME'):
const, text = line.split()
name = text
if line.startswith('NAME'):
lst = line.split()
lst.pop(0) #drop type field
name = lst.pop(0) # second word is out target
Офлайн