Python итерации по объекту JSON и запись в CSV - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь перебрать объект 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 - перед этой строкой, - нет?Как я могу напечатать «а» для отладки кода?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Хорошо, сделайте одно, 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}
0 голосов
/ 11 марта 2019

Если вы хотите отладить, какие данные были переданы в определенной строке, тогда вы выбираете IDE, такую ​​как Pycharm. Используя Pycharm, вы можете сохранить точки останова , и будет возможность отладить приложение во время выполнения, и теперь вы можете легко отладить вашу программу.

Просто попробуй ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...