unicodecsv.DictReader如何表示csv文件

时间:2017-04-09 03:44:26

标签: python data-analysis

我目前正在阅读python中关于数据分析的Udacity课程,我们一直在使用unicodecsv库。

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

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

为了解决这个问题,我想弄清楚数据是如何在字典和列表中表示的,我很困惑。有人可以向我解释一下。

例如,我不明白的一件事是为什么以下引发错误

enrollment['cancel_date']

虽然以下工作正常:

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

希望这个问题有道理。我只是在想象所有这些是如何表现出来的。

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

1 个答案:

答案 0 :(得分:0)

我也因为与课程相关的一些麻烦而来到这里,发现这个没有答案。但是我认为你已经管理好了。无论如何回答这里,以便其他人可能会发现这有用。

就像我们都知道的那样,可以像

那样访问词典
dictionary_name['key']

同样如此 enrollments['cancel_date']也应该有用。

但是,如果你做了像

这样的事情
print enrollments

你会看到结构

[{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是捕获每个可迭代元素enrollments的虚拟变量,如enrollments[1], enrollments[2] ... enrollments[n]

因此,每次enrollment都有来自enrollments的字典,因此enrollment['cancel_date']可以使用enrollments['cancel_date']

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

  

" u"是什么意思?在你' ..' ?例如:u' cancel_date' = u' 11-02-19'。

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

这主要是因为unicodecsv包不会成为跟踪和转换csv文件中每个项目的头痛问题。它将它们读作Unicode以保留所有字符。现在,这就是Caroline和您定义并使用parse_date()和其他函数将Unicode字符串转换为所需数据类型的原因。这是数据处理过程的一部分。