Как определить несколько слов и соответствующих значений из каждой строки в файле ex: "status":"ok"
Я пытаюсь создать сценарий, который, по сути, позволит мне создать список с конкретными элементами из строк, которые могут быть вставлены в базу данных SQL. У меня есть несколько строк, таких как следующие в текстовом файле "address.txt":
{"status":"OK","message":"OK","data":[{"type":"addressAccessType","addressAccessId":"0a3f508f-e7c8-32b8-e044-0003ba298018","municipalityCode":"0766","municipalityName":"Hedensted","streetCode":"0072","streetName":"Værnegården","streetBuildingIdentifier":"13","mailDeliverySublocationIdentifier":"","districtSubDivisionIdentifier":"","postCodeIdentifier":"8000","districtName":"Århus","presentationString":"Værnegården 13, 8000 Århus","addressSpecificCount":1,"validCoordinates":true,"geometryWkt":"POINT(553564 6179299)","x":553564,"y":6179299}]}
Например я хочу удалить
"type":"addressAccessType","addressAccessId":"0a3f508f-e7c8-32b8-e044-0003ba298018"
И в итоге получаем список столбцов и список значений, которые можно записать в файл file_output.txt, например:
INSERT INTO ADDRESSES (%s) VALUES (%s)
Это то, что я до сих пор
# Writes %s into the file output_data.txt
address_line = """INSERT INTO ADDRESSES (%s) VALUES (%s)"""
# Reads every line from the file messy_data.txt
messy_string = file("addresses.txt").readlines()
cols = messy_string[0].split(",") #Defines each word in the first line separated by , as a column name
colstr = ','.join(cols) # formatted string that will plug in nicely
output_data = file("output_data.txt", 'w') # Creates the output file: output_data.txt
for r in messy_string[0:]: # loop through everything after first line
#r = r.replace(':',',')
#temp_replace = r.translate(None,'"{}[]()')
#address_list = temp_replace.split(",")
#address_list = [x.encode('utf-8') for x in address_list]
vals = r.split(",") # split at ,
valstr = ','.join(vals) # join with commas for sql
output_data.write(address_line % (colstr, valstr)) # write to file
output_data.close()
Если включены некоторые из моих комментариев, возможно, это поможет. Также я заметил, что когда я использую #address_list = temp_replace.split(",")
все мои символы utf-8 испорчены uo, и я не знаю, почему или как это исправить.
ОБНОВЛЕНИЕ Глядя на этот пример Как я могу конвертировать JSON в CSV? Я пришел с этим кодом, чтобы исправить мою проблему:
# Reads every line from the file coordinates.txt
messy_string = file("coordinates.txt").readlines()
# Reads with the json module
x = json.loads(messy_string
x = json.loads(x)
f = csv.writer(open('test.csv', 'wb+'))
for x in x:
f.writerow([x['status'],
x['message'],
x['data']['type'],
x['data']['addressAccessId'],
x['data']['municipalityCode'],
x['data']['municipalityName'],
x['data']['streetCode'],
x['data']['streetName'],
x['data']['streetBuildingIdentifier'],
x['data']['mailDeliverySublocationIdentifier'],
x['data']['districtSubDivisionIdentifier'],
x['data']['postCodeIdentifier'],
x['data']['districtName'],
x['data']['presentationString'],
x['data']['addressSpecificCount'],
x['data']['validCoordinates'],
x['data']['geometryWkt'],
x['data']['x'],
x['data']['y']])
Тем не менее, это не решает мою проблему, теперь я получаю следующую ошибку
Traceback (most recent call last):
File "test2.py", line 10, in <module>
x = json.loads(messy_string)
File "C:\Python27\lib\json\__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
Кто-нибудь может помочь? Заранее спасибо.
1 ответ
Каждая строка выглядит как правильный JSON для меня. Вы можете просто оценить JSON и выбрать ключи, которые хотите сохранить (как со словарем)
import json
messy_string = file("addresses.txt").readlines()
for line in messy_string:
try:
parsed = json.loads(line)
column_names = parsed.keys()
column_values = parsed.values()
print parsed
except:
raise 'Could not parse line'