Reputation: 9844
I'm just trying to read a .csv using the first row as keys for the dictionary, with no success. My file has two lines (test), items being delimited by tabs.
subjectID logID logTimestamp gameKey userID writer gameTime gameCode gameDesc
9991 1711774 6/13/14 E9E91B56 L11-13 general 358 1002 GAMESCRIBE_CREATED
Code :
def process_data(file_path):
users = {}
# Open the .csv file and creates a dict of actions
with open(file_path, 'rb') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter='\t')
print spam reader
print spamreader.fieldnames
for row in spamreader:
print row
I keep receiving this error:
['subjectID', 'logID', 'logTimestamp', 'gameKey', 'userID', 'writer', 'gameTime', 'gameCode', 'gameDesc']
Traceback (most recent call last):
File "logEvents.py", line 41, in <module>
process_data(logs_path)
File "logEvents.py", line 11, in process_data
for row in spamreader:
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 108, in next
row = self.reader.next()
ValueError: I/O operation on closed file
I don't know what I'm doing wrong.
Upvotes: 2
Views: 3228
Reputation: 180391
You have for row in spamreader
outside the with
block in your actual code:
with open(file_path, 'rb') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter='\t')
print spamreader
for row in spamreader: # your code
print row
Once you leave the with
block the file is closed so trying to read from the file object fails.
Upvotes: 2