bugfix> python > 投稿

永続的なAPI呼び出しを行いながら、次のようにデータを再編成してファイルに保存するために、大きなリストをループしています。

for item in music:
    # initialize data container
    data = defaultdict(list)
    genre = item[0]
    artist= item[1]
    track= item[2]
    # in actual code, api calls happen here, processing genre, artist and track
    data['genre']= genre
    data['artist'] = artist
    data['track'] = track
    # use 'a' -append mode
    with open('data.json', mode='a') as f:
        f.write(json.dumps([data], indent=4))

注意:API呼び出しを行うための1時間のウィンドウがあるため(トークンの有効期限が切れると)、その場で for loop 内でデータをディスクに保存する必要があります 。

上記のメソッドは data.json にデータを追加しますファイルですが、ダンプリストはカンマ区切りではなく、ファイルは次のように設定されます:

[
  {
    "genre": "Alternative", 
    "artist": "Radiohead", 
    "album": "Ok computer"
  }
]
[
  {
    "genre": "Eletronic", 
    "artist": "Kraftwerk", 
    "album": "Computer World"
  }
]

だから、コンマで区切られたリストのリストで終わるデータをダンプするにはどうすればよいですか?

回答 3 件
  • このような何かが動作します

    import json
    music = [['Alternative', 'Radiohead', 'Ok computer'], ['Eletronic', 'Kraftwerk', 'Computer World']]
    
    output = list()
    for item in music:
        data = dict()
        genre = item[0]
        artist= item[1]
        track= item[2]
        data['genre']= genre
        data['artist'] = artist
        data['track'] = track
        output.append(data)
    
    with open('data.json', mode='a') as f:
            f.write(json.dumps(output, indent=4))
    
    

    私のdata.jsonには次が含まれます:

    [
        {
            "genre": "Alternative", 
            "track": "Ok computer", 
            "artist": "Radiohead"
        }, 
        {
            "genre": "Eletronic", 
            "track": "Computer World", 
            "artist": "Kraftwerk"
        }
    ]
    
    

  • 1つの方法は、JSONファイルに書き込む前にJSONファイルを読み取ることです。

    例:

    import json
    for item in music:
        # initialize data container
        data = defaultdict(list)
        genre = item[0]
        artist= item[1]
        track= item[2]
        data['genre']= genre
        data['artist'] = artist
        data['track'] = track
        # Read JSON
        with open('data.json', mode='r') as f:
            fileData = json.load(f)
        fileData.append(data)
        with open('data.json', mode='w') as f:
            f.write(json.dumps(fileData, indent=4))
    
    

  • 大規模なデータセットの場合、 pandas  (シリアライズ用)および pickle  (保存用)チャームのように一緒に動作します。

    df = pd.DataFrame()
    for item in music:
        # initialize data container
        data = defaultdict(list)
        genre = item[0]
        artist= item[1]
        track= item[2]
        # in actual code, api calls happen here, processing genre, artist and track
        data['genre']= genre
        data['artist'] = artist
        data['track'] = track
        df = df.append(data, ignore_index=True)
        df.to_pickle('data.pkl')
    
    

あなたの答え