首页 > 解决方案 > Python 通用查询 - Dataquest.io

问题描述

尝试通过 Dataquest.io 课程并好奇为什么我的答案与接受的答案相冲突。目标是从 .csv 为变量生成一个列表:dataset_data

提出的解决方案是:

    # Solution code
class Dataset:
    def __init__(self, data):
        self.data = data

f = open("nfl.csv", 'r')
csvreader = csv.reader(f)
nfl_data = list(csvreader)

nfl_dataset = Dataset(nfl_data)
dataset_data = nfl_dataset.data

但是,我编写了以下代码:

class Dataset:
    def __init__(self,data):
        self.nfl_data = []
        self.temp_data = open(data,'r').read().split('\n')
        for n_data in self.temp_data:
            self.nfl_data.append(n_data.split(","))
nfl_datas = Dataset("nfl.csv")
dataset_data = nfl_datas.nfl_data

对于这两种方法, print() 会产生以下结果:

[['year', 'week', 'winner', 'loser'], ['2009', '1', 'Pittsburgh Steelers', 'Tennessee Titans'],

但是在网站上,我的代码会产生以下错误:

dataset_data isn’t defined in your code, but we expected it to be list type

任何想法,有帮助。

标签: pythoncsvreader

解决方案


尝试打印两种情况的列表结果列表的长度。在尝试查看为什么两段代码没有产生相同的输出以检查两个输出实际上不同的所有可能方式时,这是一个好主意。

当我检查这个问题时,您的列表看起来比正确答案长 1 个元素。这可能是由于您使用手动读取的方法 .split("\n") split() 的技巧是它与 join() 相反,因此可以使用 split() 的结果列表用 join() 精确地重新生成原始字符串。因此,如果 CSV 有一个尾随 \n,那么您将列表中的最后一个元素作为空字符串。CSV 模块非常强大,我强烈建议您使用它而不是重新发明轮子,除非您正在进行学术练习来理解像这样的挑战。


推荐阅读