Как перебрать строку внутри файла с помощью регулярного выражения в качестве переменной цикла - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать что-то вроде функции Explode для файла json.Цикл должен построчно получать файл json, и в каждой строке у меня есть несколько значений, которые я хочу извлечь из этой строки и поместить их вместе с основной строкой (например, вид сбоку или функция Разнесения в SQL)

Данные выглядят так:

{"wl_id":0,"wl_customer_id":0,"wl_webpage_name":"webpage#00","wl_timestamp":"2013-01-27 16:07:02","wl_key2":103717,"wl_key3":589101,"wl_key4":23095,"wl_key5":200527,"wl_key6":60319}

. Теперь то, что я хочу, похоже на SQL. Развернуть этоно когда я помещаю Regex в следующий цикл for, он просто получает первый результат и ничего не делает, или другим способом он просто берет те же результаты и записывает их так часто, как находит символ в строке.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Вот код, который решает мой кейс

import json
import io
import sys
import re

with io.open('lateral_result.json', 'w', encoding="utf-8") as f, io.open('lat.json', encoding="utf-8") as g:
    for line in g:
        l = str(line)
        data = json.loads(l)  
        for k in (x for x in data.keys() if x.startswith("wl_key")):
             x = re.search('(.*wl_timestamp":"[^"]+",")', line)
             print(x.group(0)+str(k)+'":'+str(data[k])+'}', file=f)
0 голосов
/ 20 января 2019

Не используйте regex для json - используйте json для json и управляйте структурой данных:

import json

data_str = """{"wl_id":0,"wl_customer_id":0,"wl_webpage_name":"webpage#00","wl_timestamp":"2013-01-27 16:07:02","wl_key2":103717,"wl_key3":589101,"wl_key4":23095,"wl_key5":200527,"wl_key6":60319}"""

data = json.loads(data_str)  # you can use json.load( file_handle )

print(data)

for k in (x for x in data.keys() if x.startswith("wl_key")):
    print(data["wl_timestamp"],k,data[k])

Выход:

2013-01-27 16:07:02 wl_key2 103717
2013-01-27 16:07:02 wl_key3 589101
2013-01-27 16:07:02 wl_key4 23095
2013-01-27 16:07:02 wl_key5 200527
2013-01-27 16:07:02 wl_key6 60319
...