怎么会呢unicodesv.DictReader代表csv fi

2024-09-25 00:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习用python进行数据分析的Udacity课程,我们一直在使用unicodesv库。在

更具体地说,我们编写了以下代码,该代码读取csv文件并将其转换为列表。代码如下:

def read_csv(filename):
with open(filename,'rb')as f:
    reader = unicodecsv.DictReader(f)
    return list(reader) 

为了弄清楚这一点,我试图弄清楚数据在字典和列表中是如何表示的,我非常困惑。有人能给我解释一下吗。在

例如,有一件事我不明白为什么下面的代码会抛出一个错误

^{pr2}$

下面的方法很好:

for enrollment in enrollments:
enrollments['cancel_date'] = parse_date(enrollment['cancel_date'])

希望这个问题有意义。我只是很难想象这一切是如何表现出来的。在

任何帮助都将不胜感激。 谢谢。在


Tags: 文件csv代码列表readdatedeffilename
1条回答
网友
1楼 · 发布于 2024-09-25 00:30:20

我也在这里遇到了一些与课程有关的麻烦,结果发现这个问题没有答案。不过我想你已经成功了。总之在这里回答,这样别人可能会觉得这个有用。在

我们都知道,字典可以像

dictionary_name['key']

同样的 enrollments['cancel_date']也可以。在

但是如果你做一些

^{pr2}$

你会看到结构

[{u'status': u'canceled', u'is_udacity': u'True', ...}, {}, ... {}]

如果你注意到括号,它就像一个list of dictionaries。你可能会说它是一个list of list。试试看。在

print enrollments[0][0]

你会得到一个错误!KeyError。在

所以,这就像是一本字典集。如何访问它们?通过enrollments[n]缩小到任何字典(相当于csv的行)。在

现在你有一本字典了。现在可以自由使用key。在

print enrollments[0]['cancel_date']

现在进入你的循环

for enrollment in enrollments:
    enrollment['cancel_date'] = parse_date(enrollment['cancel_date'])

它所做的是enrollment是一个伪变量,它捕捉每个iterable元素enrollments,就像enrollments[1], enrollments[2] ... enrollments[n]。在

所以每次enrollment都有来自enrollments的字典,所以enrollment['cancel_date']会在{}上工作。在

最后,我想补充一点,这就是为什么我来到线程。在

What is the meaning of "u" in u'..' ? Ex: u'cancel_date' = u'11-02-19'.

答案是这意味着字符串被编码为Unicode。它不是字符串的一部分,而是python表示法。Unicode是一个包含世界上所有语言的字符和符号的库。在

这主要是因为unicodecsv包不需要跟踪和转换csv文件中的每个项目。它将它们读作Unicode以保留所有字符。这就是为什么Caroline和您定义并使用parse_date()和其他函数将Unicode字符串转换为所需的数据类型。这都是数据争夺过程的一部分。在

相关问题 更多 >