python - 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
任何想法,有帮助。
解决方案
尝试打印两种情况的列表结果列表的长度。在尝试查看为什么两段代码没有产生相同的输出以检查两个输出实际上不同的所有可能方式时,这是一个好主意。
当我检查这个问题时,您的列表看起来比正确答案长 1 个元素。这可能是由于您使用手动读取的方法 .split("\n") split() 的技巧是它与 join() 相反,因此可以使用 split() 的结果列表用 join() 精确地重新生成原始字符串。因此,如果 CSV 有一个尾随 \n,那么您将列表中的最后一个元素作为空字符串。CSV 模块非常强大,我强烈建议您使用它而不是重新发明轮子,除非您正在进行学术练习来理解像这样的挑战。
推荐阅读
- corda - 我需要(查询)从corda Vault Query获取数据降序
- ios - SwiftUI 中的后沿和前沿是什么意思?
- javascript - 如何使用javascript按行长度过滤数组的数组?
- google-cloud-platform - GCP 数据流作业部署
- javascript - 此变体代码不适用于我在 doStuff 函数中的代码
- spring-boot - SpringBoot RestTemplate 使用 LoadBalanced 时超时
- scala - 根据 typeclass 设置抽象类型
- css - 删除悬停时的下划线
- javascript - 在 WEBRTC 中测量 Ping
- git - Git 从头开始重启