Python csv.reader: How do I return to the top of the file?

PythonCsv

Python Problem Overview


When I'm moving through a file with a csv.reader, how do I return to the top of the file. If I were doing it with a normal file I could just do something like "file.seek(0)". Is there anything like that for the csv module?

Thanks ahead of time ;)

Python Solutions


Solution 1 - Python

You can seek the file directly. For example:

>>> f = open("csv.txt")
>>> c = csv.reader(f)
>>> for row in c: print row
['1', '2', '3']
['4', '5', '6']
>>> f.seek(0)
>>> for row in c: print row   # again
['1', '2', '3']
['4', '5', '6']

Solution 2 - Python

You can still use file.seek(0). For instance, look at the following:

import csv
file_handle = open("somefile.csv", "r")
reader = csv.reader(file_handle)
# Do stuff with reader
file_handle.seek(0)
# Do more stuff with reader as it is back at the beginning now

This should work since csv.reader is working with the same.

Solution 3 - Python

I've found the csv.reader and csv.DictReader a little difficult to work with because of the current line_num. making a list from the first read works well:

>>> import csv
>>> f = open('csv.txt')
>>> lines = list( csv.reader(f) ) # <-- list from csvReader
>>>
>>> for line in lines:
...  print(line)
['1', '2', '3']
['4', '5', '6']
>>>
>>> for line in lines:
...  print(line)
['1', '2', '3']
['4', '5', '6']
>>>
>>>lines[1]
['4', '5', '6']

this captures the optional first row used by the dictReader but lets you work with the list again and again and even inspect individual rows.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNopeView Question on Stackoverflow
Solution 1 - PythonFederico A. RamponiView Answer on Stackoverflow
Solution 2 - PythonEvan FosmarkView Answer on Stackoverflow
Solution 3 - PythonMarc CompereView Answer on Stackoverflow