2013-03-05 2 views
0

Я хочу выполнить итерацию по строкам файла и напечатать некоторый вывод для каждого из них. Все напечатанные строки должны содержать ,\n в конце, за исключением последней строки.Последний элемент в итераторе python

Мой первый подход должен был использовать метод hasNext(), которого не существует. Я знаю, что возникает исключение StopIteration, но я не уверен, как я мог бы использовать его на Pythonic, чтобы достичь того, чего хочу.

+0

делает последнюю строку файла, который вы читаете, имеет новую строку? –

+5

Вы знаете, что вы также можете использовать '' \ n'.join (lines) 'для его достижения? – gefei

+0

Не делайте этого, если он не поместится в вашей памяти. –

ответ

2

Вот класс-оболочка для итератора, который делает дать вам hasNext свойство:

class IteratorEx(object): 
    def __init__(self, it): 
     self.it = iter(it) 
     self.sentinel = object() 
     self.nextItem = next(self.it, self.sentinel) 
     self.hasNext = self.nextItem is not self.sentinel 

    def next(self): 
     ret, self.nextItem = self.nextItem, next(self.it, self.sentinel) 
     self.hasNext = self.nextItem is not self.sentinel 
     return ret 

    def __iter__(self): 
     while self.hasNext: 
      yield self.next() 

Демо:

iterex = IteratorEx(xrange(10)) 
for i in iterex: 
    print i, iterex.hasNext 

распечаток:

0 True 
1 True 
2 True 
3 True 
4 True 
5 True 
6 True 
7 True 
8 True 
9 False 
6

Распечатайте первую линию самостоятельно, а затем другие линии, добавленные ",\n".

firstline = next(thefile) 
print get_some_output(firstline) 
for line in thefile: 
    print ",\n" + get_some_output(line) 
1

Вы, по-видимому, хотите сначала снять существующие линии. Затем вы можете перебирать раздели линии, получить выход и присоединиться результаты вместе с помощью «\ п», например, так:

f = open('YOUR_FILE', 'r') 
print ",\n".join([get_some_output(line.rstrip("\n")) for line in f]) 
1

ответы, имеющие отношение к вашему вопросу появляются в некоторых из сообщений, перечисленных ниже. Хотя некоторые из этих вопросов существенно различаются по смыслу настоящего вопроса, большинство из них имеют такие информативные ответы, которые я перечислил здесь в любом случае. Обратите внимание: ответ Павла является более чистым решением текущей проблемы, чем в следующем, но некоторые из более старых ответов применяются в более общем плане.

Python: Looping through all but the last item of a list,
Have csv.reader tell when it is on the last line,
Getting the first and last item in a python for loop,
What is the pythonic way to detect the last element in a python 'for' loop?
Python How to I check if last element has been reached in iterator tool chain,
Cleanest way to get last item from python iterator,
How to treat the last element in list differently in python?,
Python: how do i know when i am on the last for cycle,
Ignore last \n when using readlines with python,
Python Last Iteration in For Loop,
Python 3.x: test if generator has elements remaining

Один из вышеперечисленного был занесен в «Связанные» списке с правой боковой панели для данного вопроса, но другие не были. Некоторые из вопросов в «Связанной» боковой панели стоит посмотреть и могли бы быть включены в список выше.

Смежные вопросы