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