索引超出范围甚至认为元素存在

问题描述

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

929912,"172.83.40.219","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
> ...

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

解决方法

试试

row = next(reader_data);

row= reader_data.next();

它应该逐行读取整行,然后您可以按照需要执行 row[1]。

,

两个选项: 首先你可以投入列表

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

第二个选择,对我来说最好的是使用熊猫

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

每一行都是一个条目列表,您可以通过其索引访问这些条目。因此,您使用 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