【问题标题】:Getting elements from a sub-list in Python从 Python 中的子列表中获取元素
【发布时间】:2020-04-23 08:44:47
【问题描述】:

我有一个 .csv 文件,其中包含以下 4 行元素:

dev1, NX-OS, 10.0.0.1, admin, admin
dev2, NX-OS, 10.0.0.2, admin, admin
dev3, NX-OS, 10.0.0.3, admin, admin
dev4, NX-OS, 10.0.0.4, admin, admin

我正在尝试提取任何元素。为了做到这一点,我有以下几点:

import csv
dev_list=[]
infile=open('dev_in.csv','r')
csv_in=csv.reader(infile)

for dev in csv_in:
    dev_list.append(dev)

dev_list 的结果是以下列表:

[
    ['dev1, NX-OS, 10.0.0.1, admin, admin'],
    ['dev2, NX-OS, 10.0.0.2, admin, admin'],
    ['dev3, NX-OS, 10.0.0.3, admin, admin'],
    ['dev4, NX-OS, 10.0.0.4, admin, admin']
]

为了提取第一个列表的第一个元素,我编码:

element=dev_list[0]
print(element[0])

但是,结果我得到了完整的第一个列表:

dev1, NX-OS, 10.0.0.1, admin, admin

也许我应该使用“split”函数将其拆分,但我认为这会不必要地扩展代码。我需要提取每个子列表的第一个元素。但是,我稍后可能需要提取其他元素。

还有其他方法吗?是否还有更好的方法来编写此代码,也许与列表理解提前谢谢。

【问题讨论】:

  • 除非csv 有办法处理分隔符,这正是使用split 的时候。它只会添加一行。
  • 为什么不使用 Pandas 读取 csv 文件?
  • 您根本不需要split()csv.reader() 已经这样做了。您需要将代码更改为类似于devs = list(csv.reader(open('dev_in.csv'), skipinitialspace=True))。之后devs 将是一个列表列表,因此,为了获得开发人员名称,例如,您可以使用for dev in devs: print(dev[0])
  • 您在问题上发布的结果列表不是您从发布的代码中得到的。
  • @accdias 我再次检查了代码,这就是我得到的。你有什么不一样的吗?

标签: python list


【解决方案1】:

总结一下我的评论,这是您需要做的(考虑到 Python 3):

import csv
from pathlib import Path

dev_in = Path('dev_in.csv')

devs = list(csv.reader(dev_in.open(), skipinitialspace=True))

for dev in devs:
    # print dev names
    print(dev[0])

上面的代码将给出以下行作为输出:

dev1
dev2
dev3
dev4

这是一个概念证明:

Python 3.7.5 (default, Dec 15 2019, 17:54:26) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> from pathlib import Path
>>> dev_in = Path('dev_in.csv')
>>> 
>>> devs = list(csv.reader(dev_in.open(), skipinitialspace=True))
>>> devs
[['dev1', 'NX-OS', '10.0.0.1', 'admin', 'admin'], ['dev2', 'NX-OS', '10.0.0.2', 'admin', 'admin'], ['dev3', 'NX-OS', '10.0.0.3', 'admin', 'admin'], ['dev4', 'NX-OS', '10.0.0.4', 'admin', 'admin']]
>>> dev=devs[0]
>>> dev
['dev1', 'NX-OS', '10.0.0.1', 'admin', 'admin']
>>> dev[0]
'dev1'
>>>

希望对你有帮助。

【讨论】:

  • 感谢您的回复。但是,我遇到了同样的错误。我从您的devs 中得到的列表如下:[['dev01, NX-OS, 10.0.0.1, admin, admin'], ['dev02, NX-OS, 10.0.0.2, admin, admin'], ['dev03, NX-OS, 10.0.0.3, admin, admin'], ['dev04, NX-OS, 10.0.0.4, admin, admin']]。我可以看到我的列表中的每个元素都没有你的引号,这使你可以选择所需的元素。这与我从dev_list 中的代码中得到的列表完全相同。
  • 可能与您的csv 模块有关。这里我使用csv.__version__1.0
  • 我也在用1.0版本。
  • 所以你的 Python 安装肯定有问题。 :-(
  • 我不太确定。我目前在 Pycharm for Windows 上运行 Python Python 3.8.1(最新版本)。我也尝试使用常规的 Python Shell。我在另一台计算机上做了同样的事情,我总是遇到同样的错误。我也尝试过使用 Python 3.7,结果仍然存在 :(
猜你喜欢
  • 2016-01-14
  • 2016-03-02
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
相关资源
最近更新 更多