0

我有一个 csv 文件的文件夹,我正在解析为 PostgreSQL 数据库,在大多数情况下它相对简单,但是其中一个值作为字符串返回,但实际上是一个字典列表,如下所示:

编辑:这是正在读取的值的结构,它具有可变数量的条目,或者有时根本没有。这是一个字符串,由 csv 读取器对象读入,作为一行中的值

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

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

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

有什么想法吗?

4

0 回答 0