muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
[python] simple stuff2
18.09.2008 08:40
|
|
|
Как внутри цикла переходить к обработке следующей строчки? line.next() не хочет.
code:
input_file = 'bird.inp'
f_in = open(input_file, "r")
lines=f_in.readlines()
f_in.close()
for line in lines:
|
|
|
__No__
|
|
|
|
|
Рег.: 17.01.2005
|
Сообщений: 21063
|
Из: Внутренняя Монголия
|
Рейтинг: 6309
|
|
Re: [python] simple stuff2
[re: muse]
18.09.2008 09:12
|
|
|
|
muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
Re: [python] simple stuff2
[re: __No__]
18.09.2008 09:29
|
|
|
ну это тоже не то например, бывает нужно две строчки проскочить
|
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [python] simple stuff2
[re: muse]
18.09.2008 09:40
|
|
|
явным образом получить итератор и играться с ним.
|
|
muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
Re: [python] simple stuff2
[re: Yorik]
18.09.2008 09:49
|
|
|
А можно на примере? Ввести индекс что ли?
|
|
|
__No__
|
|
|
|
|
Рег.: 17.01.2005
|
Сообщений: 21063
|
Из: Внутренняя Монголия
|
Рейтинг: 6309
|
|
Re: [python] simple stuff2
[re: muse]
18.09.2008 09:56
|
|
|
f.readlines() это список. Возьми да сделай цикл for i in range(f.readlines())
Если нужен итератор то можно xreadlines, а можно методами не заморачиваться:
code: fvv@no:~/tmp$ cat tmp.txt
a
b
c
d
e
fvv@no:~/tmp$ cat tmp.py
f = open('tmp.txt')
for line in f:
print line
f.next()
fvv@no:~/tmp$ python tmp.py
a
c
e
Traceback (most recent call last):
File "tmp.py", line 5, in <module>
f.next()
StopIteration
|
Dixi. |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [python] simple stuff2
[re: __No__]
18.09.2008 11:27
|
|
|
|
__No__
|
|
|
|
|
Рег.: 17.01.2005
|
Сообщений: 21063
|
Из: Внутренняя Монголия
|
Рейтинг: 6309
|
|
Re: [python] simple stuff2
[re: Yorik]
18.09.2008 11:58
|
|
|
Quote:
ужас. 2. у тебя сдвигают итератор и for, и next, ты используешь то, что в данном случае файл сам себе итератор, ... в общем, ужас.
А тебе священный ужас мешает пользоваться фичами языка?
Quote:
A file object is its own iterator, for example iter(f) returns f (unless f is closed). When a file is used as an iterator, typically in a for loop (for example, for line in f: print line), the next() method is called repeatedly. This method returns the next input line, or raises StopIteration when EOF is hit when the file is open for reading (behavior is undefined when the file is open for writing). In order to make a for loop the most efficient way of looping over the lines of a file (a very common operation), the next() method uses a hidden read-ahead buffer. As a consequence of using a read-ahead buffer, combining next() with other file methods (like readline()) does not work right.
Ссылка по теме: http://docs.python.org/lib/bltin-file-objects.html
|
Dixi. |
|
muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
Re: [python] simple stuff2
[re: __No__]
18.09.2008 12:06
|
|
|
ну это понятно, почему в примере в первом посте не предусмотрен переход к след. элементу внутри цикла?
|
|
|
__No__
|
|
|
|
|
Рег.: 17.01.2005
|
Сообщений: 21063
|
Из: Внутренняя Монголия
|
Рейтинг: 6309
|
|
Re: [python] simple stuff2
[re: muse]
18.09.2008 12:10
|
|
|
Непонятно о чем это ты.
Переход к следующему элементу предусмотрен в языке - использованием итератора или слова continue, почему в твоем коде ничего этого нет - ну ты так его написал.
|
Dixi. |
|
muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
Re: [python] simple stuff2
[re: __No__]
18.09.2008 12:14
|
|
|
я же написал, итератор не работает:
code:
from math import *
input_file = 'bird.inp'
f_in = open(input_file, "r")
lines=f_in.readlines()
f_in.close()
for line in lines:
lines.next()
code:
File "test.py", line 9, in ?
lines.next()
AttributeError: 'list' object has no attribute 'next'
|
|
|
muse
|
ihmaiwtd
|
|
|
|
Рег.: 15.08.2004
|
Сообщений: 19791
|
Из: WA
|
Рейтинг: 7286
|
|
Re: [python] simple stuff2
[re: muse]
22.09.2008 16:46
|
|
|
нашел
Редактировал muse (22.09.2008 16:53)
|
|
|
|
Re: [python] simple stuff2
[re: muse]
12.10.2008 00:58
|
|
|
ужас нах. зачем пользовать память под весь файл? code:
cat a.txt
1
12
13
1244
cat 1.py
f = open('a.txt')
a = f.readline()
while a:
print a
a = f.readline()
f.close()
сорри за неактуальность. не выдержал.
|
с наилучшими пожеланиями |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
|
именно этим занимались все уважаемые джентельмены в этом треде. почитай повнимательней.
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
|
Ну, и если пошла пьянка:
code:
with open ('a.txt') as f:
a = f.readline ()
while a:
print a
a = f.readline ()
|
Ein Gemeinschaft, Ein Platform, Ein Emacs А что за тема с белым кошаком? |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [python] simple stuff2
[re: Emacs]
12.10.2008 02:24
|
|
|
чем-таки вам не нравится итератор?..
|
|
|
Re: [python] simple stuff2
[re: Yorik]
12.10.2008 03:13
|
|
|
а) из всех предыдущих примеров только один не делал readlines() б) чем with f = open... лучше f = open(..) бла бла бла? в) итераторы здесь надо использовать и их используем, но не явно (по сути readline() - и есть метод .next(), который и есть итератор.
|
с наилучшими пожеланиями |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
|
|
|
Re: [python] simple stuff2
[re: Yorik]
13.10.2008 01:10
|
|
|
прочитал. где там больше одного человека до меня не использовали readlines()?
|
с наилучшими пожеланиями |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
|
Использовали readlines(): muse muse
Использовали/предлагали другое: __No__ __No__ Emacs
и тут ты на белом коне "я все знаю, вы тут все не так пишете", пишешь тоже самое, что и последние 2 человека.
|
|