簡體   English   中英

在python中,如何將列表中的某些值僅寫入CSV文件?

[英]In python, how can I write only certain values from a list to a CSV file?

我知道以前曾問過這個問題,但是我認為此上下文有所不同,因為我遇到了另一個問題,即在我遇到TypeError時,列表索引必須是整數,而不是元組。

我現在擁有的代碼:

writer = csv.writer(open("test-new.csv", "wb"))
with open("test.csv", "r") as f:
    reader = csv.reader(f)
    for v in reader:
        # does things
        writer.writerow(v[0, 3])

我認為發生此問題是因為腳本認為我正在嘗試將元組寫入新的csv文件(測試新),而實際上我只是想將4個值列表中的這兩個值寫入一個新的CSV

關於如何告訴python我不是要寫元組的任何想法嗎? 是否有可能改為使用dictwriter

如果我最初的csv是這樣的:

a, b, c, d
1, 2, 3, 4
5, 6, 7, 8

我希望我的最終輸出看起來像:

a, d
1, 4
5, 8

謝謝!

writer.writerow(v[0, 3])更改為writer.writerow(tuple(v[::3]))writer.writerow((v[0], v[3]))

[::#]被稱為擴展切片表示法,它表示每#個插槽抓取一個元素,因此在這種情況下為:0.3。 注意:如果您的列表超過四個,則第一種方法將給出: (v[0],v[3],v[6],...)

您的v[0,3]是無效的Python表示法。 解釋器認為您正在嘗試傳遞一個元組來為列表建立索引,這是無法完成的。 因此,錯誤。

v[0,3] (v[0], v[3])替換v[0,3] 您試圖制作一個非連續的切片,但實際上並沒有真正使用切片語法。 除非沒有指定嚴格的模式,否則這是將列表的任意元素轉換為元組以用於需要序列的一般方法。

我知道您正在使用特定模塊,但是csv tables pandas很棒。 看一下這個:

>>> df = pd.read_csv('test.csv',sep=r'\s+')
>>> df
   a,  b,  c,  d
0  1,  2,  3,  4
1  5,  6,  7,  8
>>> col_list = [0,2]
>>> df = df[col_list] #you just pick which columns you want to keep.
>>> df                #voila
   a,  c,
0  1,  3,
1  5,  7,

如果您正在嘗試實驗,應該嘗試一下。 (假裝我選擇了您需要的列)

這里的問題是,您用於從列表中獲取兩項的語法不正確。 例如:

>>> v = [1, 2, 3, 4]
>>> v[0, 3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple

您可以通過幾種方法獲得這些值。 下面顯示了一些方法。

對於您的特定情況,您可以獲取所需的兩個項目:

(v[0], v[3])

您可以使用列表理解:

[v[i] for i in [0, 3]]

您還可以使用來自operator itemgetter

import operator
operator.itemgetter(0, 3)(v)

暫無
暫無

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

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