Python Forum

Full Version: Parse String between 2 Delimiters and add as single list items
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi all.

I`ve got a big string that contains multiple different data. The dataitems are seperated by {data}

I want to grab the data between theese 2 delimiters { and } and add them as a single item to another list.

i was using the code.
file = open('csdb.rss',mode='r')
 # read all lines at once
all_of_it = file.read()
data = []
data.append( re.findall(r'\{({^}}*)\}', all_of_it))
but this didnt work and added the whole content as just one list item. How should i call it parser correctly ? or as alternative read the file and parse it while reading and then append to the list as items ?

a sample sting is like :

{"name":"Freaky Fish DX +3PD [retailversion]","id":"202669","category":0,"group":"Onslaught","year":2021,"handle":"Shocker,Bieno64,Didi,Jazzcat","rating":0,"updated":"2021-04-07","released":"2021-04-06"},{"name":"Mimizuku Saga 10","id":"202614","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","rating":0,"updated":"2021-04-07","released":"2021-04-05"},{"name":"Big Time Bugger","id":"202613","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","event":"Cassette 50 Charity Competition","rating":0,"updated":"2021-04-05","released":"2021-03-30"}
Except for not having brackets around it, this appears to be valid JSON. I'd add the brackets and parse as JSON. That will give you a list of dicts that you can read.

import json

file = open('csdb.rss', mode='r')
json_string = "[" + file.read().rstrip() + "]"
data = json.loads(json_string)
print(f"The first element is {data[0]}")

print("The keys and values in the first element are:")
for k, v in data[0].items():
    print(f"{k} => {v}")
(Apr-11-2021, 09:41 PM)bowlofred Wrote: [ -> ]Except for not having brackets around it, this appears to be valid JSON. I'd add the brackets and parse as JSON. That will give you a list of dicts that you can read.

import json

file = open('csdb.rss', mode='r')
json_string = "[" + file.read().rstrip() + "]"
data = json.loads(json_string)
print(f"The first element is {data[0]}")

print("The keys and values in the first element are:")
for k, v in data[0].items():
    print(f"{k} => {v}")

ouch my Bad, i posted to the wring Subcategory. My python version is 2.7.18 There the Syntax is different and i get the error

File "F:\GP\C64\BBS\csdbrss\grabcsdb.py", line 34
print(f"The first element is {data[0]}")
^
SyntaxError: invalid syntax
import re

text = '{"name":"Freaky Fish DX +3PD [retailversion]","id":"202669","category":0,"group":"Onslaught","year":2021,"handle":"Shocker,Bieno64,Didi,Jazzcat","rating":0,"updated":"2021-04-07","released":"2021-04-06"},{"name":"Mimizuku Saga 10","id":"202614","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","rating":0,"updated":"2021-04-07","released":"2021-04-05"},{"name":"Big Time Bugger","id":"202613","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","event":"Cassette 50 Charity Competition","rating":0,"updated":"2021-04-05","released":"2021-03-30"}'

results = re.findall('{(.+?)}', text)
for result in results:
    print(result)
Output:
"name":"Freaky Fish DX +3PD [retailversion]","id":"202669","category":0,"group":"Onslaught","year":2021,"handle":"Shocker,Bieno64,Didi,Jazzcat","rating":0,"updated":"2021-04-07","released":"2021-04-06" "name":"Mimizuku Saga 10","id":"202614","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","rating":0,"updated":"2021-04-07","released":"2021-04-05" "name":"Big Time Bugger","id":"202613","category":0,"group":"Commocore","year":2021,"handle":"Bago Zonde","event":"Cassette 50 Charity Competition","rating":0,"updated":"2021-04-05","released":"2021-03-30"
(Apr-11-2021, 09:52 PM)lastyle Wrote: [ -> ]ouch my Bad, i posted to the wring Subcategory. My python version is 2.7.18

2.7 won't have f-strings. Just change the print to use another format method.


for k, v in data[0].items():
    print(" => ".join((str(k), str(v))))
(Apr-11-2021, 11:00 PM)bowlofred Wrote: [ -> ]
(Apr-11-2021, 09:52 PM)lastyle Wrote: [ -> ]ouch my Bad, i posted to the wring Subcategory. My python version is 2.7.18

2.7 won't have f-strings. Just change the print to use another format method.


for k, v in data[0].items():
    print(" => ".join((str(k), str(v))))

Both replies (approaches) work like a charm.

Thanks for a lot