通过DictReader读取.csv

时间:2015-09-14 19:35:32

标签: python csv dictionary

我只是尝试使用第一行作为字典的键来读取.csv,但没有成功。我的文件有两行(测试),项目由制表符分隔。

subjectID   logID   logTimestamp    gameKey userID  writer  gameTime    gameCode    gameDesc
9991    1711774 6/13/14 E9E91B56    L11-13  general 358 1002    GAMESCRIBE_CREATED

代码:

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

我一直收到这个错误:

    ['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

我不知道自己做错了什么。

1 个答案:

答案 0 :(得分:2)

您的实际代码中的with块之外有with open(file_path, 'rb') as csvfile: spamreader = csv.DictReader(csvfile, delimiter='\t') print spamreader for row in spamreader: # your code print row

with

一旦离开{{1}}块,文件就会关闭,因此尝试从文件对象中读取失败。