Разбор строкового списка словарей из csv файлов - PullRequest
0 голосов
/ 04 мая 2018

У меня есть папка 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-файла, который я затем помещаю в базу данных. Я уверен, что это может быть чище, но это один и готовый код, проблема у меня заключается в том, как обрабатывать строковое значение, которое на самом деле является списком. Я уверен, что есть какой-то простой способ справиться с этим, который я пропускаю.

Моими первыми мыслями было поместить значение в пустой список (в предположении, что я получу итеративный список словарей). Но это просто дает мне список символов в строке.

Я также не могу разбить строку на запятую, так как в текстовом поле есть пунктуация.

есть мысли?

...