【问题标题】:Pair Port Numbers from list after xlrd importxlrd 导入后从列表中配对端口号
【发布时间】:2017-09-20 08:44:52
【问题描述】:

我在这个问题上得到了帮助,可以从这个有效的网站配对 IP 地址。我尝试修改相同的脚本以用于配对端口号,但不断收到浮点属性错误。我试过改变它,但作为一个新手,我没有取得任何进展,请帮忙。

这是数据 ['', '', '', '', '', '', '', '池成员端口', '', 10001.0, 10001.0, '', '', '', '', '', '', '', 11001.0, 11001.0, '', '', '', '', '', '', '', 12001.0, 12001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, '', 10001.0, '', '', '', '', '', '', '', '', 11001.0, '', '', '', '' , '', '', '', '', 12001.0, '', '', '', '', '', '', '', '', 14001.0, '', '', '', '', '', '', '', '', 22.0, '', '', '', '', '', '', '', '', 22.0, '', 22.0, '' , '', '', '', '', '', '', '', 14001.0, '', '', '', '', '', '', '', '', '' , '', '', '接收字符串', '', '', '', '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '']

这是我修改后的脚本 Pool_Ports = [[]]

for x in PPoData[PPoData.index('Pool Member Port'):]:
    if not x:
        if Pool_Ports[-1]:
            Pool_Ports.append([])

    else:
        #Pool_Ports[-1].append(x.partition(' ')[0])


print(Pool_Ports)

错误信息 AttributeError: 'float' 对象没有属性 'partition'

适用于 IP 地址的上一个链接 Pair IP addresses in a list pulled from xlrd

【问题讨论】:

  • 你想要的输出是什么?像['10001.0', '10001.0', '11001.0',... 或者更确切地说是[10001, 10001, 11001,...
  • 其实我不知道你需要什么输出,所以如果你能提供一个例子,那就太棒了。

标签: list slice xlrd


【解决方案1】:

错误很简单,真的。您的输入列表将其端口值(例如11001.0)存储为浮点数,因此代码中断。即时修复将在分区之前将x 转换为字符串。

Pool_Ports[-1].append(str(x).partition(' ')[0])

然而,输出最终是

[['10001.0', '10001.0'], ['11001.0', '11001.0'], ['12001.0', '12001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0'], ['10001.0'], ['11001.0'], ['12001.0'], ['14001.0'], ['22.0'], ['22.0'], ['22.0'], ['14001.0'], ['接收'], []]

这不是您需要的,因为它有 ['Receive'][],它们不是有效的池端口。

因此,受@cᴏʟᴅsᴘᴇᴇᴅ 对上一个问题的回答的启发,我建议您使用正则表达式。

import re

PPoData = ['', '', '', '', '', '', '', 'Pool Member Port', '', 10001.0, 10001.0, '', '', '', '', '', '', '', 11001.0, 11001.0, '', '', '', '', '', '', '', 12001.0, 12001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, 14001.0, '', '', '', '', '', '', '', 14001.0, '', 10001.0, '', '', '', '', '', '', '', '', 11001.0, '', '', '', '', '', '', '', '', 12001.0, '', '', '', '', '', '', '', '', 14001.0, '', '', '', '', '', '', '', '', 22.0, '', '', '', '', '', '', '', '', 22.0, '', 22.0, '', '', '', '', '', '', '', '', 14001.0, '', '', '', '', '', '', '', '', '', '', '', 'Receive string', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

pattern = '\d+\.\d+'

Pool_Ports = [[]]
for x in PPoData:
    if not x and Pool_Ports[-1]:
        Pool_Ports.append([])

    m = re.match(pattern, str(x))
    if m:
        Pool_Ports[-1].append(str(x))

if [] in Pool_Ports:
    Pool_Ports.remove([])
print(Pool_Ports)
# [['10001.0', '10001.0'], ['11001.0', '11001.0'], ['12001.0', '12001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0', '14001.0'], ['14001.0'], ['10001.0'], ['11001.0'], ['12001.0'], ['14001.0'], ['22.0'], ['22.0'], ['22.0'], ['14001.0']]

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2023-04-02
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2019-05-01
    • 2018-11-16
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多