【问题标题】:Unable to read data from CSV file and store in Dictionary无法从 CSV 文件中读取数据并存储在字典中
【发布时间】:2019-06-11 21:36:52
【问题描述】:

上下文: 构建一个简单的股票维护者,使用 CSV 文件来存储和读取数据。

库存文件中的数据:

product 1,"[200, 35.5, 37.0]"    
products = {}

with open("stock.csv", "r") as csv_file:
    csv_reader = csv.reader(csv_file)

    for line in csv_reader:
        products[line[0]] = line[1]
        print(line)
        print(products)

给出错误:

products[line[0]] = line[1]  
IndexError: list index out of range  
['product 1', '[200, 35.5, 37.0]']  
{'product 1': '[200, 35.5, 37.0]'}

【问题讨论】:

  • 最后的两个打印命令只是为了检查和查找错误来源。
  • 根据平台的不同,您可能需要以二进制模式打开文件 - 请参阅documentation
  • 您所拥有的没有任何问题。可能是您尝试时的数据不正确。尝试再次创建数据文件。
  • 能否检查stock.csv文件中是否有空行或在products[line[0]] = line[1]之前添加打印语句print(line)
  • @meowgoesthedog 这不起作用。

标签: python python-3.x csv


【解决方案1】:

在 Python 中,数组是零索引的 (即:line[0] 是第一个元素,line[1] 是第二个元素,依此类推。)
在这里:products[line[0]] = line[1],您正在尝试访问 line 的第二个元素,但从您的示例中,csv 文件仅包含一行,因此出现错误。

【讨论】:

  • 在问题中,用户正在尝试访问第一行的第一个和第二个元素,而不是尝试访问第二行。
  • line[0] 是产品的名称,而 line[1] 是存储在 CSV 文件中的列表的详细信息。两者都只访问 CSV 文件中的第一个数据行。请重发/检查。谢谢:)
【解决方案2】:

您的股票文件中的数据只有一行:

产品 1,"[200, 35.5, 37.0]"

因此,当您尝试在第 7 行获取 line[1] 时,您正在尝试获取数据的第 2 行中的数据,而这并不存在。

【讨论】:

  • 在问题中,用户正在尝试访问第一行的第一个和第二个元素,而不是尝试访问第二行。
  • 我正在尝试使用“for line”循环来获取 CSV 文件中的每一行作为列表。稍后,我使用该列表访问实际数据(名称为第 0 索引,详细信息列表为第 1 索引)。而且我自己也找不到这样做的错误。
【解决方案3】:

来自this SO answer

你缺少的是

skipinialspace=True

在您的 csv_reader 中。

这是有效的代码:

p = {}
with open("stock.csv", "r") as csv_file:
    csv_reader = csv.reader(csv_file, skipinitialspace=True)
    for line in csv_reader:
            p[line[0]] = line[1]
    print(p)

结果:

{'product 1': '[200, 35.5, 37.0]'}

【讨论】:

  • 出于某种原因,我使用的列表索引的任何组合 >>> p[line[0]] = line[1] 或 >>> p[line[0]] = p[line[ 0],错误依然存在(列表索引超出范围)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多