запись нескольких вложенных словарей в файл CSV - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть тонна диктовок, которые я конвертировал из данных JSON в твиттере. Теперь я хочу превратить их в один файл .csv. Я искал сайт, но решения, кажется, соответствуют диктовкам с очень небольшим количеством ценностей или диктов, которые уже существуют. В моем случае число ключей немного выше, и мне также нужно пройти итеративный процесс, чтобы превратить каждый файл JSON в диктовку. Другими словами, я хочу записать каждый из моих файлов JSON в мой файл .csv, как только я превращу их в файл dict в итеративном процессе.

Вот мой код:

json_path = "C://Users//msalj//OneDrive//Desktop//pypr//Tweets"
for filename in os.listdir(json_path): 
    with open(filename, 'r') as infh:
        for data in json_parse(infh):

и вот пример моих преобразованных файлов JSON:

{'actor': {'displayName': 'RIMarkable',
           'favoritesCount': 0,
           'followersCount': 0,
           'friendsCount': 0,
           'id': 'id:twitter.com:3847371',
           'image': 'Picture_13.png',
           'languages': ['en'],
           'link': 'ht........ble',
           'links': [{'href': 'htt.....m', 'rel': 'me'}],
           'listedCount': 0,
           'objectType': 'person',
           'postedTime': '2007-01-09T02:53:35.000Z',
           'preferredUsername': 'RIMarkable',
           'statusesCount': 0,
           'summary': 'The Official, Unofficial BlackBerry Weblog',
           'twitterTimeZone': 'Eastern Time (US & Canada)',
           'utcOffset': '0',
           'verified': False},
 'body': 'Jim Balsillie To Present At JP Morgan Technology Conference: Research in Motion co-CEO, Jim Balsillie,.. ht...qo',
 'generator': {'displayName': 'twitterfeed', 'link': 'htt......om'},
 'gnip': {'matching_rules': [{'tag': None, 'value': '"JP Morgan"'}]},
 'id': 'tag:search.twitter.com,2005:66178882',
 'link': 'ht...82',
 'object': {'id': 'object:search.twitter.com,2005:66178882',
            'link': 'ht.....82',
            'objectType': 'note',
            'postedTime': '2007-05-16T19:00:24.000Z',
            'summary': 'Jim Balsillie To Present At JP Morgan Technology Conference: Research in Motion co-CEO, Jim Balsillie,.. ht......qo'},
 'objectType': 'activity',
 'postedTime': '2007-05-16T19:00:24.000Z',
 'provider': {'displayName': 'Twitter',
              'link': 'ht......m',
              'objectType': 'service'},
 'retweetCount': 0,
 'twitter_entities': {'hashtags': [],
                      'urls': [{'expanded_url': None,
                                'indices': [105, 130],
                                'url': 'htt.......5qo'}],
                      'user_mentions': []},
 'verb': 'post'}

Кто-нибудь может мне помочь с его кодированием? Большое спасибо!

1 Ответ

0 голосов
/ 02 сентября 2018

С различными глубинами, если вы хотите сохранить все, эта проблема становится немного сложнее.

То, что я сделал с этой проблемой, сглаживает словарь.

def flatten_dict(input_dict):
    flat_dict = {}
    for k,v in input_dict.items():
        if isinstance(v, dict):
            for k2, v2 in flatten_dict.items():
                flat_dict[k2] = v2
        elif any([isinstance(v, c_type) for c_type in [list, tuple]]):
            for index, i in enumerate(v):
                 flat_dict["{}-{}".format(k, index)] = i
        elif any([isinstance(v, c_type) for c_type in [str, int, float]]):
            flat_dict[k] = v
        else:
            print("unknwon type, add handling for: {}".format(type(v)))
    return flat_dict

тогда я буду использовать первый экземпляр json для создания строки заголовка:

header_row = [k for k in flatten_dict(row1)]

и распечатать строку заголовка в csv

",".join(header_row)

и распечатайте данные в том же порядке для каждой строки json:

for row in rows:
    flat_row = flatten_dict(row)
    print_row = ",".join([flat_row[header] if header in flat_row else "" for header in header_row])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...