簡體   English   中英

將 integer 的列表逐行寫入 csv

[英]Write a list of integer into csv row-wise

我正在嘗試將 float 或 int 列表逐行寫入 csvfile。

出於某種原因,如果列表由字符串組成,我可以編寫它們

import csv
even_numbers = ['2','4','6','8'] # list of strings
header = ['even numbers']

with open('even_numbers.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(header)
    writer.writerows(even_numbers)

但是當有整數時會引發錯誤

import csv
even_numbers = [2,4,6,8] # list of integers
header = ['even numbers']

with open('even_numbers.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(header)
    writer.writerows(even_numbers)

錯誤

---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
<ipython-input-15-ae817296f34e> in <module>
      6     writer = csv.writer(csvfile)
      7     writer.writerow(header)
----> 8     writer.writerows(Even_list)

Error: iterable expected, not int

我可以通過哪些其他方式逐行向 csv 寫入列表?

writerows() 方法需要一個列表列表。 行是一個列表,行是這些列表。

兩種解決方案,取決於你想要什么:

even_numbers = [[2, 4, 6, 8]]

或者

even_numbers = [[2], [4], [6], [8]]

要自動進行后一種轉換,請使用:

rows = [[data] for data in even_numbers]
writer.writerows(rows)

根據文檔writeRows方法需要一個行對象列表作為參數。

您還可以在此處查看行 object的定義。

那是:

對於 Writer 對象,行必須是字符串或數字的可迭代對象,對於 DictWriter 對象,必須是將字段名映射到字符串或數字的字典(首先通過 str() 傳遞它們)。

您收到此消息的原因是它試圖將該列表中的每個 int 轉換為一行本身。 它適用於字符串的原因是字符串本身是可迭代的。 但是,我懷疑如果您在字符串列表中嘗試了多個數字,如下所示:

even_numbers = ['24','45','66','82'] # list of strings

它可能會將每個數字拆分為行中的列,因為它將字符串作為行 object 讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM