python迭代JSON对象并写入csv

问题描述 投票:0回答:2

我试图迭代一个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()更改为以下代码时,它可以工作:

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子句在a: flat_attr(getattr(issue, a))之后时,循环如何工作,而当for和if在该行之前时它不会出现?如何打印'a'来调试代码?

谢谢!

python json for-loop
2个回答
0
投票

如果您想调试在特定行中传递的数据,那么您可以使用像Pycharm这样的IDE。使用Pycharm可以保留断点,并且可以选择在运行时调试应用程序,现在您可以轻松地调试程序。

试一试..


0
投票

好的,做一件事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}
© www.soinside.com 2019 - 2024. All rights reserved.