将段元组列表写入csv文件

时间:2017-04-16 23:36:25

标签: python csv

以下代码用于编写元组,每个元组包含大段文本,后面有2个标识符,每个条目一行。

import urllib2
import json
import csv

base_url = "https://www.eventbriteapi.com/v3/events/search/?page={}
writer = csv.writer(open("./data/events.csv", "a"))
writer.writerow(["description", "category_id", "subcategory_id"])

def format_event(event):
    return event["description"]["text"].encode("utf-8").rstrip("\n\r"), event["category_id"], event["subcategory_id"]

for x in range(1, 2):
    print "fetching page - {}".format(x)
    formatted_url = base_url.format(str(x))
    resp = urllib2.urlopen(formatted_url)
    data = resp.read()
    j_data = json.loads(data)
    events = map(format_event, j_data["events"])
    for event in events:
        #print event
        writer.writerow(event)

    print "wrote out events for page - {}".format(x)

理想的格式是让每一行包含一个段落,然后是上面列出的其他字段,但这里是数据如何输出的屏幕截图。

enter image description here

如果我改为以下这一行:

writer.writerow([event])

以下是文件现在的样子: enter image description here

它当然看起来更接近我想要的东西,但它在每个条目周围都有括号,这是不可取的。

修改 here是一个代码段,其中包含我正在处理的数据样本。

2 个答案:

答案 0 :(得分:0)

将您的csv编辑器更改为DictWriter

做一些调整:

def format_event(event):
    return {"description": event["description"]["text"].encode("utf-8").rstrip("\n\r"), 
            "category_id": event["category_id"], 
            "subcategory_id": event["subcategory_id"]}

可能是您需要做的其他一些小事情,但使用DictWriter并正确格式化数据是使用我发现的csv文件最简单的方法。

答案 1 :(得分:0)

您是否可以尝试直接写入CSV文件而无需使用csv模块?您可以将逗号分隔的字符串写入/附加到CSV文件,就像写入典型的文本文件一样。此外,您处理删除\r\n字符的方式可能无法正常工作。您可以使用正则表达式查找这些字符,并将其替换为空字符串""

import urllib2
import json
import re

base_url = "https://www.eventbriteapi.com/v3/events/search/?page={}"

def format_event(event):
    ws_to_strip = re.compile(r"(\r|\n)")
    description = re.sub(ws_to_strip, "", event["description"]["text"].encode("utf-8"))
    return [description, event["category_id"], event["subcategory_id"]]

with open("./data/events.csv", "a") as events_file:
    events_file.write(",".join(["description", "category_id", "subcategory_id"]))

    for x in range(1, 2):
        print "fetching page - {}".format(x)
        formatted_url = base_url.format(str(x))
        resp = urllib2.urlopen(formatted_url)
        data = resp.read()
        j_data = json.loads(data)
        events = map(format_event, j_data["events"])

        for event in events:
            events_file.write(",".join(event))

        print "wrote out events for page - {}".format(x)