2017-04-16 102 views
1

下面的代碼旨在將每個包含大段文本和2個標識符的元組寫入每個條目的單行。將段落元組列表寫入csv文件

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

它當然看起來更接近我想要的,但它在每個條目附近都有不希望出現的括號。

EDIT here是包含林處理的數據的樣本片段。

回答

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) 
+0

我仍然有與間距相同的問題,我已經添加了一個片段,其中包含我正在處理的數據樣本。 – TheM00s3

+0

問題可能出在您處理刪除'\ r'和'\ n'字符的方式。我已經更新了我的答案,以反映利用正則表達式來查找這些字符並用空字符串「」「替換它們的解決方案。 –

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文件工作找到。

+0

我仍然有同樣的問題與間距,我添加了具有即時通訊處理的數據的樣本片段。 – TheM00s3

+0

如果我將字典轉換爲json並轉儲它,但文本格式正確。 – TheM00s3