У меня есть папка csv-файлов, которые я анализирую в базе данных PostgreSQL, по большей части это относительно просто, но одно из значений возвращается в виде строки, но на самом деле это список словарей, например:
РЕДАКТИРОВАТЬ: это структура читаемого значения, она имеет переменное количество записей, а иногда и вовсе нет. это строка, считываемая объектом csv reader как значение в строке
[{"Comment":"natural text here1", "Added By":"user1", "Made On":"Timestamp1"},
{"Comment":"natural text here2", "Added By":"user2", "Made On":"Timestamp2"},
{"Comment":"natural text here3", "Added By":"user3", "Made On":"Timestamp3"}]
это не допустимый объект json, поэтому вы не можете json.loads () его.
Я также попытался сделать это строкой JSON
json_obj = '{\"%s\": %s}' % (columns[j], item)
чтобы дать мне:
{
"Comments" : [
{"Comment":"natural text here1", "Added By":"user1", "Made On":"Timestamp1"},
{"Comment":"natural text here2", "Added By":"user2", "Made On":"Timestamp2"},
{"Comment":"natural text here3", "Added By":"user3", "Made On":"Timestamp3"}
]
}
, который является допустимым объектом json, но json.loads по-прежнему выдает ошибку ValueError.
Я делаю что-то вроде этого:
dir = 'file\\path'
files = os.listdir(dir)
for file in files:
i = 0
columns = []
path = os.path.join(dir, file)
with open(path, mode='rb') as csvfile:
reader = csv.reader(csvfile, encoding = 'utf-8', errors = 'ignore',
delimiter = ',', quotechar = '"')
for row in reader:
j = 0
dictionary = dict()
if i == 0:
columns = row
i += 1
else:
for item in row:
if columns[j] == "the column in question"
#-------------------------------
#trying to parse out this value
#--------------------------------
else:
dictionary[columns[j]] = item
j += 1
По сути, это оставляет мне словарь для каждой строки CSV-файла, который я затем помещаю в базу данных. Я уверен, что это может быть чище, но это один и готовый код, проблема у меня заключается в том, как обрабатывать строковое значение, которое на самом деле является списком. Я уверен, что есть какой-то простой способ справиться с этим, который я пропускаю.
Моими первыми мыслями было поместить значение в пустой список (в предположении, что я получу итеративный список словарей). Но это просто дает мне список символов в строке.
Я также не могу разбить строку на запятую, так как в текстовом поле есть пунктуация.
есть мысли?