2017-10-16 23 views
0

我有以下格式的文件(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並補充說,通過匹配其在功能get_status通過與一個在myfile.txtcreated_atuser_id返回status關鍵?

輸出(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()