处理URI数据的问题(试图直接加载到DB)。

0 人关注

我正在编写一个脚本,对一个供应商进行API调用。 最初的调用会返回一个JSON列表,其中包含一个URI列表,以便我从中获取数据。 当我连接到其中一个URI并检索数据时,返回的不是JSON,而是以逗号分隔的。 我可以毫无问题地将其写入CSV文件。

我想做的是把它直接写入我的数据库,问题就在这里。 这些行是以\n为界的,字段是以逗号为界的,有时它们用双引号括起来,有时不括。 使问题更加复杂的是,一些被双引号括起来的字段里有逗号。

我需要能够得到标题(我已经弄明白了),这样我就可以用它们作为字段名写入数据库(供应商喜欢改变顺序,偶尔会排除一些字段),我不能只是把数据倒入表中,因为可能会有新的或丢失的或不符合顺序的字段。 我已经尝试了很多方法,但没有任何方法可以正确地分割这个字符串。

下面是数据集中一行的例子。 【替换代码0

What I need is "July Test", "", "nothing to see here", "1043 E Main, Dallas, TX 40565", "more random crap"

下面是我的HTTP调用和处理返回的情况。 也许我应该用不同的方法来处理? 我已经注释了所有我尝试过的和失败过的东西。

Takes the URL for the most current file and opens connection and exports data

    site= str(x["full_csv_url"])
    hdr = {'User-Agent': 'Mozilla/5.0'}
    req = Request(site,headers=hdr)
    req.add_header('Authorization', token)
    with urlopen(req) as x:
        data = x.read().decode('utf-8')        
        #for i in data.split('\n'):
        #    list = print([i])
        list_of_lines = data.splitlines(True)
        new_split_data = []
        for i in range(1, 2):   #nlines
            ith_line = str(list_of_lines[i])
            ith_line = ith_line.replace("\n","")
            ith_line = ith_line.replace("\r","")
            """Split a python-tokenizable expression on comma operators"""
            #compos = [-1] # compos stores the positions of the relevant commas in the argument string
            #compos.extend(t[2][1] for t in generate_tokens(StringIO(ith_line).readline) if t[1] == ',')
            #compos.append(len(ith_line))
            #new_ith_line = [ ith_line[compos[i]+1:compos[i+1]] for i in xrange(len(compos)-1)]
            #for i in new_ith_line:
            #    print[i]
            print(ith_line)
            print("New Line")
            print("New Line")
            #new_ith_line = re.split(r', (?=(?:"[^"]*?(?: [^"]*)*))|, (?=[^",]+(?:,|$))', ith_line)
            new_ith_line = list(csv.reader(ith_line, delimiter=','))
            #new_ith_line = re.split(r',(?=")', ith_line)
            #new_ith_line = new_ith_line.replace("'\"","'")
            #new_ith_line = new_ith_line.replace("\"'","'")
            print(new_ith_line)
            ##Didnt work-- split fields with commas between double quotes
            ##newstr = ith_line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")
            # Didnt work, only returned 1st 2 columns
            #print(pp.commaSeparatedList.parseString(ith_line).asList())
            # Didnt work, returned error
            #newStr = [ '"{}"'.format(x) for x in list(csv.reader([ith_line], delimiter=',', quotechar='"'))[0] ]
            #print(newStr)
            #print(ith_line)
            #each_line = data.body.getText().partition("\n")[i]
    
python
rest
jrichmo
jrichmo
发布于 2019-07-25
1 个回答
jrichmo
jrichmo
发布于 2019-07-26
已采纳
0 人赞同

我设法找到了一个铰链表达式,经过小幅调整后适用于我的情况。