Python csv.DicReader()是否返回字典对象?

Python csv.DicReader()是否返回字典对象?,python,csv,dictionary,Python,Csv,Dictionary,当我试图使用csv.DictReader()将csv文件传输到字典时,如下所示: csv_file = open(input_file, "r") data = csv.DictReader(csv_file) [['play', 'weather', 'temperature'], ['yes', 'sunny', '77'], ['no', 'rainny', '60'], ['yes', 'windy', '70'],...] 但是,我无法将任何字典方法应用到数据中 print(typ

当我试图使用
csv.DictReader()
csv文件传输到字典时,如下所示:

csv_file = open(input_file, "r")
data = csv.DictReader(csv_file)
[['play', 'weather', 'temperature'], ['yes', 'sunny', '77'], ['no', 'rainny', '60'], ['yes', 'windy', '70'],...]
但是,我无法将任何字典方法应用到
数据中

print(type(data))
因此,我打印
数据的类型

print(type(data))
并找到类型为:

<class 'csv.DictReader'>
实际上,我没有预期的输出。我只想存储这些值,以便进一步计算

编辑(根据评论):输出可以是两部分。第一个是csv文件的标题,例如
['play'、'weather'、'temperature']
。第二个可以是:
[['yes'、'sunny'、'77']、['no'、'rainny'、'60']、['yes'、'windy'、'70']…]

csv.reader 给定所需的输出,您不需要使用
dict
或因此而使用
csv.DictReader
。相反,只需使用
csv.reader
,它返回一个迭代器。然后使用
next
list
分别提取标题和数据:

from io import StringIO
import csv

x = StringIO("""play,weather,temperature
yes,sunny,77
no,rainy,60
yes,windy,70""")

# replace x with open('file.csv', 'r')
with x as fin:
    reader = csv.reader(fin)
    headers = next(reader)  # get headers from first row
    data = list(reader)     # exhaust iterator from second row onwards
结果是标题列表和数据列表:

print(headers)

['play', 'weather', 'temperature']

print(data)

[['yes', 'sunny', '77'],
 ['no', 'rainy', '60'],
 ['yes', 'windy', '70']]
熊猫 如果您愿意使用第三方库,Pandas可能是更好的选择,因为它可以更方便地处理类型转换和索引:

import pandas as pd

df = pd.read_csv('file.csv')
结果是一个
pd.DataFrame
对象:

print(df)

  play weather  temperature
0  yes   sunny           77
1   no   rainy           60
2  yes   windy           70

print(type(df))

<class 'pandas.core.frame.DataFrame'>
打印(df)
播放天气温度
是的,阳光77
1不下雨60
2有风70
打印(类型(df))

DictReader
返回类似文件的对象。它仍然一次读取一行csv文件中的数据,但返回的行是按顺序排列的字典,而不是列表

如果您的文件是:

play,weather,temperature
yes,sunny,77
no,rainny,60
yes,windy,70
然后,您可以按以下方式使用
DictReader

with open('path/to/file.csv') as fp:
    header = fp.readline().strip().split(',')
    dreader = DictReader(fp, header)
    data = list(dreader)
在这种情况下,
data
将是一个
OrderedDict
对象的列表,其中包含从标题到行中每个项目的映射

data
#returns:
[OrderedDict([('play', 'yes'), ('weather', 'sunny'), ('temperature', '77')]),
 OrderedDict([('play', 'no'), ('weather', 'rainny'), ('temperature', '60')]),
 OrderedDict([('play', 'yes'), ('weather', 'windy'), ('temperature', '70')])]

你能告诉我们你的csv文件是什么样子的,你想得到什么样的字典作为输出吗?举个例子,你想你想要的字典是什么样子的?我已经添加了这个文件。但基本上,我不知道哪种方式是最好的储存方式@jpp@Aran-菲伊已经添加了这个文件。但基本上,我不知道哪种方式是存储它的最佳方式。如果您希望存储计算,则建议使用pandas dataframe而不是dict…非常感谢!这正是我想要的。