从csv文件中解析字典的字符串列表

时间:2018-05-04 05:22:34

标签: json python-3.x dictionary file-io csv-import

我有一个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文件的每一行的字典,然后我将其推入数据库。我敢肯定,它可以更干净但它的一个和完成的代码,我遇到的问题是如何处理实际上是列表的字符串值。我确信有一些简单的方法可以解决这个问题。

我的第一个想法是将值放入一个空列表中(假设会产生一个可迭代的字典列表。)但这只是给了我字符串中的字符列表。

我也无法用逗号分割字符串,因为自然文本字段有标点符号。

有什么想法吗?

0 个答案:

没有答案