4

我正在将 Python 3.2 与 Mac OS Maverick 一起使用,并且正在尝试获取具有以下格式的 .cvs 文件:

'Lisa plowed ', '1A', 'field', 'field', 'field', 'field', 'field'
'John greased ', '1A', 'axle', 'wheel', 'wheels', 'wheel', 'engine'
'Tracy freed ', '1A', 'animals', 'fish', 'slaves', 'slaves', 'slaves'
'Paul alleged ', '1A', 'truth', 'crime', 'facts', 'infidelity', 'incident'

到字典中,每行中的第一项是键,行的其余部分是映射到该键的值。我尝试了不同的东西,我得到的最接近的是这段代码,但不幸的是,我还没有:

   import csv

   data =open('test.csv', encoding = 'utf=8')
   reader = csv.reader(data, delimiter=",")
   for col in reader:
       print(col)
   result = {}
   for row in reader:
       key = row[0]

       result[key] = row[1:]
   print(result)

我得到的结果只是 {} 好像字典是空的。我真的很感激这方面的任何帮助,无论是提供新的替代方案,还是将我推荐给我可以找到答案的地方。非常感谢!

4

3 回答 3

8

尝试:

import csv

data={}
with open('/tmp/text.txt') as fin:
    reader=csv.reader(fin, skipinitialspace=True, quotechar="'")
    for row in reader:
        data[row[0]]=row[1:]

print(data)       
# {'Lisa plowed ': ['1A', 'field', 'field', 'field', 'field', 'field'], 'Tracy freed ': ['1A', 'animals', 'fish', 'slaves', 'slaves', 'slaves'], 'Paul alleged ': ['1A', 'truth', 'crime', 'facts', 'infidelity', 'incident'], 'John greased ': ['1A', 'axle', 'wheel', 'wheels', 'wheel', 'engine']}
于 2013-11-06T20:25:17.600 回答
3

第一次迭代后reader,它是空的。

于 2013-11-06T20:07:54.797 回答
1

您应该能够从输出中看出发生了什么。首先你这样做:

for col in reader:
    print(col)

由于reader是一个可迭代的rows,因此会打印出 CSV 文件中的每一行。您命名该变量的col事实没有任何效果,只会让读者感到困惑。

如果有一个标题行你想特别对待,你应该做的是:

headers = next(reader)
for col in headers:
    print(col)
于 2013-11-06T20:09:57.723 回答