使用Python解析CSV文件并调用REST API

3

我非常新手Python,我有一个任务需要逐行解析一个非常庞大的.csv文件,然后基于逗号分隔的值,调用REST API。有人能帮我提供一份示例代码吗?

根据CSV文件中的第一列值,我必须调用不同的REST API或创建不同的REST URL及其对应的参数。最好的方法是将它们存储在哪里?是使用XML、哈希映射还是其他什么方式?这样,当我从CSV读取每一行时,我可以从我的配置中获取URL和所需参数,然后组成REST API的URL并调用。

第二个问题:我们是否需要创建任何线程以使其执行更快?

下面是我的代码。

import sys, argparse, csv, collections, time, datetime

EventAPIDict = {"evnet_1": "http://rest_apiurl/?",
                "evnet_2": "http://rest_apiurl/?"}

EventParamsDict = {"evnet_1": ("s", "ts"),
                "evnet_2": ("s")}

EventIndexDict = {"evnet_1": ("1", "4"),
                  "evnet_2": ("1")}

def processRow(row):
    print "-----------------------------"
    #print localRow
    event = row[0]
    if event in EventAPIDict:
        print event
        strRESTAPI = EventAPIDict[event]
        i = 0
        for param in EventParamsDict[event]:
            #print param
            indexes = EventIndexDict[event]
            value = row[int(indexes[i])]
            if param == "ts":
                timestamp = value #"2013-05-28 14:28:58"
                value = datetime.datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S').strftime("%s")
            strRESTAPI = ("%s%s=%s&")%(strRESTAPI, param, value)
            i = i + 1

        strRESTAPI = strRESTAPI[:-1]
        print strRESTAPI
        #TODO: Invoke the Rest API

#TODO: Get the csv file to be parsed.
fileName = "LogDetails.log"
# open csv file
with open(fileName, 'rb') as csvfile:
    csvfile.seek(0)

    reader = csv.reader(csvfile, delimiter=',')

    for row in reader:
        processRow(row)

csv 文件有多大? - agconti
更好的选择是使用XML,哈希表或其他什么?-- XML是一种文件格式,而哈希表是内存中的数据结构。也许您可以展示一下您尝试过的代码。 - Brent Washburne
非常感谢您的回复。文件大小约为16GB,处理速度应该非常快。 - user2479840
请查看我的代码,但是它处理起来需要很长时间。 - user2479840
1个回答

0
回答您的第一个问题 - 是的,这个脚本将解析CSV文件并对其进行操作。我在我的脚本中使用了您的基本结构来完成同样的事情。您也可以从XML或JSON格式中解析它,这些格式更易于移植到其他系统。
我需要看到数据文件才能更好地理解为什么要做比较等操作。我希望输入的CSV包含调用REST API所需的所有信息。
第二个问题:
使用file seek函数创建不同线程并执行一组调用。当然,您还需要考虑可以并发进行多少次调用以及服务器可以处理多少次调用的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接