0

我正在尝试将 curl 请求转换为 get-request 以提取一些工作数据并将其传输到具有参数化文件名的本地文件夹。一个问题是数据只是文本格式,即使尝试了多种方法,也不会转换为 JSON。根据响应,数据类型为“text/tsv;charset=utf-8”。

下一个问题是我无法将数据加载到数据框中,部分原因是我是 Python 新手,不了解这样做的各种方法,部分原因是格式化使找到适用的解决方案变得更加困难。但是,我至少能够使用 splitlines() 方法将文本分成列表。但不幸的是,我仍然无法将列表加载到数据框中。截至上次运行,错误消息是:“错误:无法连接类型为 '<class '_csv.reader'>' 的对象;只有 Series 和 DataFrame objs 有效。”

import requests
import datetime
import petl
import csv
import pandas as pd
import sys
from requests.auth import HTTPBasicAuth
from curlParameters import *

def calculate_year():
    current_year = datetime.datetime.now().year
    return str(current_year)

def file_name():
    name = "CallDetail"
    year = calculate_year()
    file_type = ".csv"
    return name + year + file_type

try:
    response = requests.get(url, params=parameters, auth=HTTPBasicAuth(username, password))
except Exception as e:
    print("Error:" + str(e))
    sys.exit()

if response.status_code == 200:
    raw_data = response.text
    parsed_data = csv.reader(raw_data.splitlines(), delimiter='\t')
    table = pd.DataFrame(columns=[
                    'contact_id',
                    'master_contact_id',  
                    'Contact_Code',
                    'media_name',
                    'contact_name',
                    'ani_dialnum',
                    'skill_no',
                    'skill_name', 
                    'campaign_no', 
                    'campaign_name', 
                    'agent_no', 
                    'agent_name', 
                    'team_no', 
                    'team_name', 
                    'disposition_code',    
                    'sla', 
                    'start_date', 
                    'start_time', 
                    'PreQueue', 
                    'InQueue', 
                    'Agent_Time', 
                    'PostQueue', 
                    'Total_Time', 
                    'Abandon_Time', 
                    'Routing_Time', 
                    'abandon', 
                    'callback_time', 
                    'Logged', 
                    'Hold_Time'])
    try:
        for row in table:
            table.append(parsed_data)
    except Exception as e:
        print("Error:" + str(e))
        sys.exit()

petl.tocsv(table=table, source=local_source+file_name(), encoding='utf-8', write_header=True)
4

1 回答 1

0

因此,您正在尝试附加您的parsed_data,这是用于迭代 CSV 数据的变量。我实际上建议先从响应中读取数据,然后将其全部加载到数据框中。这将需要对代码进行轻微的重组。像这样的东西:

parsed_data = [row for row in csv.reader(raw_data.splitlines(), delimiter='\t')]
table = pd.DataFrame(parsed_data, columns=your_long_column_list)
于 2021-11-22T04:13:12.873 回答