【问题标题】:Index out of range even thought element exists索引超出范围,即使元素存在
【发布时间】:2023-03-11 16:48:01
【问题描述】:

我有一个 csv 文件,其中的服务器列表如下所示:

929912,"172.83.40.219","System.Object[]","System.Object[]","Canada#944","ca944.nordvpn.com","0","CA","加拿大”

我需要从中提取几个值。我正在使用 csv 阅读器打开文件,但是如果我尝试访问除第一次使用索引之外的任何元素,例如 row[1](ip address),python 将返回 IndexError。 但是,如果我循环浏览该行,我会得到每个元素:

with open('servers.csv') as f:
read_data = csv.reader(f)
for row in read_data:
    for i in row:
        print(i)

> 929912
> 172.83.40.219
> ...

有没有办法在没有循环的情况下访问值?

【问题讨论】:

  • 如果我有一个仅包含该示例行的 csv 文件,row[1] 有效。但是,如果我在那里也有一个空行,那么该行显然只有一个元素,row[1] 失败。你确定这不会发生在你的情况下吗? print(row) 在你做 row[1] 失败时会说什么? stackoverflow.com/help/minimal-reproducible-example
  • 如果我只做 print(row) 我会得到一个完整的值列表 [929912,"172.83.40.219","System.Object[]","System.Object[] ","Canada#944","ca944.nordvpn.com","0","CA","Canada"]。所以文件中的所有其他值字符串都作为一个列表处理,我不能通过索引从中调用值,但我可以通过循环获取它。
  • 我完全不明白你想要达到什么目的。 row 显然有足够的元素不能引发IndexError。你在哪里以及如何得到这个错误?什么是完整的追溯?请向我们提供minimal, reproducible example

标签: python list csv index-error


【解决方案1】:

试试

row = next(reader_data);

row= reader_data.next();

它应该逐行读取整行,然后您可以按照自己的意愿执行 row[1]。

【讨论】:

  • 你也可以说 reader_data= csv.reader(open("servers.csv"))
  • 您只是在重申 OP 所做的事情。但似乎在迭代他的行时,row[1] 在某些时候失败了。
【解决方案2】:

两个选项: 首先你可以投射到列表中

with open('servers.csv') as f:
    read_data = csv.reader(f)
    read_data_list = list(read_data)
    ip = read_data_list[0][1]

第二个选项,对我来说最好的是使用 pandas

import pandas as pd
df = pd.read_csv ('servers.csv', sep=',')
ip = df.columns[1]

【讨论】:

  • 您的第一个建议只是重述了代码。如果for row in reader: row[1] 在某个时候失败,将其转换为列表然后执行read_data_list[some_index][1] 将失败
  • 第一个选项不起作用,同样的错误仍然存​​在。第二个进程文件不同,不像你描述的那样工作,我越界错误。
【解决方案3】:

每一行都是一个条目列表,您可以使用其索引访问这些条目。因此,您使用row[1] 获取 IP 地址的想法应该可行,也许您只是在错误的地方访问它。这将输出 csv 文件中每一行的 IP 地址:

with open('servers.csv') as f:
read_data = csv.reader(f)
for row in read_data:
    print(row[1]) # IP address

【讨论】:

  • 这是 OP 已经尝试过的,也是导致错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2013-05-26
  • 2013-07-28
  • 2021-03-02
  • 2018-11-16
相关资源
最近更新 更多