2017-10-16 22 views
0

Iは、次の形式のファイル(myfile.txtの)を有する交換データは

関数は
{"click_id": 124, "created_at": "2017-02-03T10:51:33", "product_id": 97373, "product_price": 320.50, "user_id": 1, "ip": "null"} 
{"click_id": 125, "created_at": "2017-10-03T10:52:33", "product_id": 96373, "product_price": 20.50, "user_id": 1, "ip": "London"} 
{"click_id": 126, "created_at": "2017-10-03T11:50:33", "product_id": 88373, "product_price": 220.50, "user_id": 2, "ip": "London"} 

def get_status(self, user_id, date): 
     for rec in self.RECORDS: 
      if rec['user_id'] == user_id and dt.datetime.strptime(rec['created_at'],'%Y-%m-%dT%H:%M:%S') == date: 
       return rec['status'] 

上記関数は、入力に基づいてステータスを返します提供されます。ステータスは"Valid", "Invalid", "Old", "New"

myfile.txt中1での機能get_statusに渡されcreated_atuser_idを照合することによって返されるstatusキーをmyfile.txtを解析して追加する方法はありますすることができますか?

出力(myfile.txtの):

{"click_id": 124, "created_at": "2017-02-03T10:51:33", "product_id": 97373, "product_price": 320.50, "user_id": 1, "ip": "null","status":"New"} 
    {"click_id": 125, "created_at": "2017-10-03T10:52:33", "product_id": 96373, "product_price": 20.50, "user_id": 1, "ip": "London","status":"Old"} 
    {"click_id": 126, "created_at": "2017-10-03T11:50:33", "product_id": 88373, "product_price": 220.50, "user_id": 2, "ip": "London","status":"Valid"} 
+0

ファイルをロードして解析し、JSON辞書を変更してから同じファイルに書き直し/シリアル化する方法を尋ねていますか? –

+0

@PAckerman種類、はい – ThatBeardTho

+0

これに関連するクラスはありますか? get_status関数のパラメータは、それがクラスの一部であることを示します。 –

答えて

0

まず、あなたのファイルが有効なJSONではないことに注意してください。これはリストなので、オブジェクトは配列内に含まれている必要があります。

これは、ファイルをインポートし、解析して、同じファイルに書き出します。ロジックを入れてループのステータスを置き換えるだけでよいです。for

import json 

data_file = "myfile.txt" 
data = open(data_file, "r+") #r+ so the file can be both read and written to 
parsed_data = json.load(data) 

for obj in parsed_data: 
    obj['status'] = "modified status" #replace the status here according to your logic 

new_data = json.dumps(parsed_data) 
data.seek(0) 
data.write(new_data) 
data.truncate() #not entirely necessary 
data.close() 
関連する問題