我正在关注有关如何转换大数据集的YouTube视频教程。 Here是YouTube教程。
我正在视频中输入代码。一切都很好,直到他定义了total_deposits()
函数的那一部分为止(大约48:00标记)。仅供参考,我正在键入演示者正在键入的内容(他发布的代码可以在他的github here中找到)。
基本上,我遇到一个NoneType
错误,但主持人却没有,我不确定为什么。我对total_deposits()
函数的基本理解是,它将遍历JSON数据结构中的所有DEPSUM
键,并不断将它们加起来直到到达最后一个“行”。我对这个问题的理解是我的代码正在累加数字,但是当遇到NoneType
元素时却不知道该怎么办,我什至不知道在哪里找到{{1} }是。
这是我收到的错误:
NoneType
我的想法是,我从他的github source复制并粘贴了数据源;我不知道是否以这样的方式粘贴数据:是否创建了某种实例或行,其中File "etl.py", line 40, in total_deposits
total += int(row['DEPSUM'].replace(",",""))
AttributeError: 'NoneType' object has no attribute 'replace'
是自动填充的。数据源是一个很大的csv文件,因此我只是将其粘贴到文本文件中。所有其他功能似乎运行良好。
此外,我浏览了数据源的JSON版本,但没有发现NoneType
的任何空值,这是函数正在浏览的内容。
这是我的数据源问题吗?也许我正在使用的python版本与演示者的python版本的行为方式不同。我构建了类似这样的循环:
DEPSUM
运行良好;看起来循环结构本身不是问题。
有关我到目前为止的代码,请参见下文:
for row in reader:
print(row['NAMEBR']
这是一张图像,显示我拥有的JSON文件没有任何空的或我知道的import csv
import json
from pprint import pprint
# all of this code is courtesy of Engineer Man
# https://www.youtube.com/watch?v=BqmtKmGNnoo
# I downloaded his data.csv file from his github repository
# https://github.com/engineer-man/youtube/blob/master/stream019/data.csv
data = open("data.csv")
reader = csv.DictReader(data)
# convert the csv file to a json format (easier to read)
def output_json():
content = json.dumps([row for row in reader], indent = 4)
with open('data.json', 'w') as file:
file.write(content)
# convert the csv file to an xml format (whatever floats your boat, man)
def output_xml():
xml = ['<?xml version="1.0" encoding="UTF-8"?>']
for row in reader:
xml.append('<bank?')
for k, v in row.items():
xml.append(' <{}>{}</{}>'.format(k, v, k))
xml.append('</bank?')
with open("data.xml", "w") as file:
file.write('\n'.join(xml))
### This is the function that causes the issues ###
# now to extract information from the data itself
def total_deposits():
total = 0
for row in reader:
total += int(row['DEPSUM'].replace(",",""))
print('total: ${}'.format(total_deposits))
# for row in reader:
# print(str(row['DEPSUM']).replace(",",""))
print('[1] convert this to json')
print('[2] convert this to xml')
print('[3] get total deposits')
choice = int(input('what would you like to do? : '))
if choice ==1:
output_json()
if choice ==2:
output_xml()
if choice ==3:
total_deposits()
print('Executing [' + str(choice) + ']' + " now...")
: