3 回答

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

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])

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(
```
添加回答
舉報