我有一个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文件的每一行的字典,然后我将其推入数据库。我敢肯定,它可以更干净但它的一个和完成的代码,我遇到的问题是如何处理实际上是列表的字符串值。我确信有一些简单的方法可以解决这个问题。
我的第一个想法是将值放入一个空列表中(假设会产生一个可迭代的字典列表。)但这只是给了我字符串中的字符列表。
我也无法用逗号分割字符串,因为自然文本字段有标点符号。
有什么想法吗?