gpt4 book ai didi

Python CSV Reader 仅限 JSON 的第一个字符

转载 作者:行者123 更新时间:2023-11-30 23:35:43 25 4
gpt4 key购买 nike

Amazon AWS Data Pipeline 提供 CSV 文件作为 MySQL 数据库的输出。在 CSV 中,有一个包含 JSON 的字段,我们尝试分别使用 Python 的内置 CSV 和 JSON 读取器来提取和解码该字段。但是,由于 CSV 的生成方式,JSON 不以引号开头,并且 CSV 解析器仅返回该 CSV 字段的 JSON 中的第一个“{”。

我们认为 CSV 读取器会看到第一个“{”,然后会看到一个换行符,它将其解释为 CSV 行的末尾。如果 JSON 用引号引起来,则该脚本可以正常工作。请参阅以下代码:

with open(args.env_vars[0] + '/click_stream_source.csv', 'r') as csvFile:
csvReader = csv.reader(csvFile, delimiter = ',')
with open(args.env_vars[1] + '/clickstream_target.csv', 'wb') as csvTarget:
csvWriter = csv.writer(csvTarget, delimiter = ',')
for row in csvReader:
json_data = json.loads(row[5])

示例 CSV 为:

    495019,,8239,E3728E7D480248AA2EB5D5BB5C467737,67.84.254.6,{
""requests"": [
{
""queryString"": null,
""time"": ""2013-06-14T11:53:40Z"",
""userAgent"": ""Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"",
""requestURI"": ""/xxxxx/xxxx/xxxx.xxxxxxx"",
""class"": ""xxxxx"",
""params"": {
""action"": ""xxxxx"",
""controller"": ""xxxx""
},
""isAjaxRequest"": false
}]}

我们得到一个

ValueError: Expecting Object ...

其中json.loads()方法

最佳答案

我认为从技术上讲你不能调用这个 CSV,因为它违反了解析规则,但我并不是想迂腐,我想说这是放弃内置解析工具并走老派的一个原因,制作一个有限状态机。这是一个简单的示例,您可以根据自己的目的进行调整。

#!/usr/bin/env python
import re
import json

def fix_and_parse(gathered_lines):
strJson = '{' + "\n".join(gathered_lines)
strJson = strJson.replace('""', '"')
return json.loads(strJson)

state = 0
with open('csvFile', 'r') as csvFile:
gathered_lines = []
for line in csvFile:
if re.search('^\d', line):
if gathered_lines:
print json.dumps(fix_and_parse(gathered_lines), indent=4)
state = 0
gathered_lines = []
else:
state = 1
if state == 1:
gathered_lines.append(line)
print json.dumps(fix_and_parse(gathered_lines), indent=4)

关于Python CSV Reader 仅限 JSON 的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com