Same reason here:
>>> li=[1,2,3,4,5,6,7,8,9]
>>> it=iter(li)
>>> print [x for x in it], [x for x in it]
[1, 2, 3, 4, 5, 6, 7, 8, 9], []
Note the empty list...
csv.reader is an iterator that produces items from a container or sequence one by one until the StopIteration exception indicates there are no more items.
For built-in types (and all library types like csv that I know of), iteration is one way, and the only way to 'go back' is to keep the items you are interested in or recreate the iterator.
You can hack/fool csv.reader by doing a backwards seek I suppose, but why do this?
You can make a copy of an iterator if you need to:
>>> it_copy=list(it)
>>> print [x for x in it_copy],[x for x in it_copy]
[1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9]
Or use itertools.tee as Mark Ransom notes.
The best is to just design your algorithm around a one-way trip through an iterator. Less memory and often faster.