簡體   English   中英

為什么我的 Python CSV 代碼在每一行中都以字符串形式讀取?

[英]Why is my Python CSV code reading in each row as a string?

我正在處理 Code Academy 課程的衍生項目,並在嘗試將 CSV 的每一行中的特定列附加到列表時遇到錯誤。

課程中的代碼

import csv

with open('cool_csv.csv') as cool_csv_file:
  cool_csv_dict = csv.DictReader(cool_csv_file)
  for row in cool_csv_dict:
    print(row['Cool Fact'])

我需要從我的 CSV 中讀取每一行,並將“主題”列的值附加到條目列表中。

import csv

entries = []

with open("list.csv") as list_csv:
  list_reader = csv.DictReader(list_csv)
  for row in list_csv:
    entries.append(row["subject"])

但我收到以下錯誤:

entry.append(row[“subject”]) 類型錯誤:字符串索引必須是整數

我知道錯誤是說按行傳遞的值是一個字符串,所以我無法使用標題名稱訪問它,但我不明白為什么。 就我所見,我的文件是一個有效的 CSV,除了附加而不是打印之外,我的代碼與課程中的代碼沒有什么不同(我測試了打印,同樣的錯誤。)

我的CSV:

subject,subject_type
first,test
second,test

我做錯了什么使我的代碼讀取字符串而不是 csv 行?

你需要循環閱讀器

  for row in list_csv:
      entries.append(row["subject"])

您錯誤地循環了 list_csv。

正如@AlirezaTajadod 所說,您正在迭代一個壞對象,您必須迭代list_reader

with open("list.csv") as list_csv:
  list_reader = csv.DictReader(list_csv)
  for row in list_reader:
    entries.append(row["subject"])

需要使用list_reader而不是list_csv 請參閱以下示例文件marks.csv

id,subject,marks
1,English,20
2,French,21
3,Spanish,21

所以我們有,

import csv
list_reader = csv.DictReader(open("marks.csv"))

您可以通過遍歷list_reader來遍歷 CSV 文件的行。 所以如果我們做一個像下面這樣的循環

for row in list_reader:
    print row

它會打印這樣的行,

{'id': '1', 'subject': 'English','marks': '20' }
{'id': '2', 'subject': 'French', 'marks': '21' }
{'id': '3', 'subject': 'Spanish','marks': '22' }

現在要獲取主題值,只需執行 print row['subject']

暫無
暫無

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

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