python - python遍历JSON对象并写入csv
问题描述
我正在尝试遍历 JSON 对象,并写入新的 CSV 文件。
无论如何,我在尝试此代码时遇到错误:
def flat_attr(thisAttr):
if type(thisAttr) is bytes:
thisAttr = (thisAttr.decode('utf-8'))[:1500]
else:
try:
thisAttr = str(thisAttr)[:1500]
except:
thsAttr = thisAttr
return thisAttr
thisDate = (datetime.today().date())
thisFile = 'sim_' + thisDate.strftime('%Y%m%d') + '.csv'
with open('/tmp/' + thisFile, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = ['sim_id', 'data'], delimiter = '\t', lineterminator = '\n')
counter = 0
for issue in results.issues:
counter += 1
print('Writer written line ' + str(counter) + ' issue_id: ' + issue.main_id)
print('Writer written line ' + str(counter) + ' issue_id: ' + issue.labels)
writer.writerow({
'sim_id': issue.main_id,
'data': json.dumps({
for a in dir(issue):
if a in attr_list:
a: flat_attr(getattr(issue, a))
print(a)
})
})
错误是这个:
E for a in dir(issue):
E ^
E SyntaxError: invalid syntax
当我将该 writerow() for 循环更改为以下代码时,它可以工作:
writer.writerow({
'sim_id': issue.main_id,
'data': json.dumps({
a: flat_attr(getattr(issue, a)) for a in dir(issue) if a in attr_list
})
})
我想出道,这就是我尝试打印'a'的原因。
当 for 循环和 if 子句在 the 之后, a: flat_attr(getattr(issue, a))
而当 for 和 if 在该行之前时,循环是如何工作的?如何打印“a”来调试代码?
谢谢!
解决方案
好的,做一件事ZeleIB,将'a'的值附加到列表并返回列表以进行测试。
例子,
for a in dir(issue):
debug_a = []
if a in attr_list:
a: flat_attr(getattr(issue, a))
debug_a.append(a)
return {'test': debug_a}
推荐阅读
- ruby-on-rails - ActionView::Template::Error(未定义的方法 `empty?' for nil:NilClass):
- sql - 如何实现关键字层次结构
- c# - Entity Framework Core 5.0 - 多对多与映射表中的附加字段
- angular - 尝试监视 moment.js 函数时出现问题
- java - java石英调度程序在来自Oracle表的特定时间运行
- amazon-web-services - AWS ELB - ECS - RDS 堆栈延迟
- javascript - 空的javascript数组被认为是字符串?
- typescript - 如何在 Vue 3 中键入仅接受 Readonly Ref 的函数?
- php - 文件 PHP 的内容
- json - 如何访问 Dart 中对象列表中的对象列表