亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

寫兩個列表來分隔 csv 列

寫兩個列表來分隔 csv 列

四季花海 2023-04-18 10:45:59
我正在嘗試將 json 解析為 csv,解析為單獨的列,但它一直合并為一個。人們在下面提出了幾種解決方案,但無濟于事。我在代碼下方發布了我正在使用的數據。它一直說我需要添加更多細節,但僅此而已。只需要一些幫助來弄清楚如何將 json 寫入 csv 中的兩列......你好?誰能幫幫我嗎?replies_final,original_final = [],[]  for i in data['items']:    original = i['snippet']['topLevelComment']['snippet']['textOriginal']    original_final.append(original)    if 'replies' in i:       x = i['replies']['comments'][0]['snippet']['textOriginal']      replies_final.append(x)     with open('test.csv',"a+", newline='',encoding="utf-8") as csv_file:        writer = csv.writer(csv_file)        for item in original_final,replies_final:            writer.writerows([item])            writer.writerows([item]) csv_file.close()
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

試試這個:

with open('test.csv', "a+", newline='', encoding="utf-8") as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(zip(original_final,replies_final))


查看完整回答
反對 回復 2023-04-18
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我對這個csv.writer()對象如何工作的實驗是


writer.writerow([['a', 'b', 'c'], ['d', 'e', 'f']])生成 CSV 文件:


a, b, c

d, e, f

當你for item in original_final, replies_final在第一次迭代中有 then 時,items是一個列表等于original_final并且在第二次迭代中它是replies_final,所以它產生一個包含original_final然后的列replies_final


你想要的是第一次迭代, item 有兩個元素:


[original_final[0], replies_final[0]]


在第二次迭代中,它應該是 [original_final[1], replies_final[1]]


等等


為此,您可以使用zip函數,如下所示


for item in zip(original_final, replies_final):


現在,您的下一個問題是original_final和replies_final需要具有相同的長度,否則該zip函數將根據兩者中最短的一個來裁剪結果


所以你可以做的就是if像這樣修改你的陳述


if 'replies' in i:?

? x = i['replies']['comments'][0]['snippet']['textOriginal']

? replies_final.append(x)

else:

? replies_final.append('')

我認為這應該有效


另外,有了with聲明,你不需要做csv_file.close(). 你可以把它拿出來


所以這是最后的代碼塊


replies_final,original_final = [],[]


for i in data['items']:

? ? original = i['snippet']['topLevelComment']['snippet']['textOriginal']

? ? original_final.append(original)

? ? if 'replies' in i:?

? ? ? ?x = i['replies']['comments'][0]['snippet']['textOriginal']

? ? ? ?replies_final.append(x)

? ? else:

? ? ? ?replies_final.append('')



? ? with open('test.csv',"a+", newline='',encoding="utf-8") as csv_file:

? ? ? ? writer = csv.writer(csv_file)

? ? ? ? for item in zip(original_final,replies_final):

? ? ? ? ? ? writer.writerows([item])

查看完整回答
反對 回復 2023-04-18
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

您需要考慮各種事情,例如,如果您的項目包含多個回復,您可以將它們全部存儲到一個臨時數組中,稍后您可以將其附加到您的replies_final對象,如果它不包含任何回復,它將保持為空,您仍然已經用與每個項目的 1:1 關系填充你的 replies_final 數組,即使它是空的


  for i in data['items']:

    original = i['snippet']['topLevelComment']['snippet']['textOriginal']

    original_final.append(original)

    item_replies = []

    if 'replies' in i: 

        # Here you can iterate over the replies and add them to a temp array

        for reply in i['replies']:

            x = i['replies']['comments'][0]['snippet']['textOriginal']

            item_replies.append(x)

    replies_final.append(item_replies)

然后你可以使用 zip 函數獲取兩個數組并將它們變成一個你可以迭代的對象,這很好,因為你已經知道對于每個項目你已經有一個評論列表,即使它是空的信息也會現在混合。然后你調用了錯誤的函數而不是使用writerows()你必須使用writerow()一次插入一個


with open('test.csv',"a+", newline='',encoding="utf-8") as csv_file:

    writer = csv.writer(csv_file)

    for i in zip(arr,arr2):

        (item, replies) = i

        writer.writerow([item, replies]))


 csv_file.close(

```


查看完整回答
反對 回復 2023-04-18
  • 3 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號