python - 如何在 Python 中将可变长度值追加到列表中

标签 python list append

我有一个包含如下输入的文件:

host1 192.168.100.24
user1@abc.com  host2 192.168.100.45 host7 192.168.100.40 host3 192.168.100.34 host4 192.168.100.20
user2@xyz.com  host8 192.168.100.48 host6 192.168.100.43 host10 192.168.100.37 
host5 192.168.100.24 host9 192.168.100.33

预期输出:

no_email: 
      host1 192.168.100.24
      host5 192.168.100.24 
      host9 192.168.100.33
user1@abc.com:  
            host2 192.168.100.45
            host7 192.168.100.40
            host3 192.168.100.34 
            host4 192.168.100.20
user2@xyz.com: 
            host8 192.168.100.48
            host6 192.168.100.43 
            host10 192.168.100.37

代码:

def get_contacts(filename):

emails = []
hostname = []
ip = []
with open(filename,'r') as contacts_file:
    for a_contact in contacts_file:
        match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', a_contact.split()[0])
        if match == None:
           emails.append('no_email')
           hostname.append(a_contact.split()[0])
           ip.append(a_contact.split()[1])
        line_length = a_contact.count(' ')
        elif line_length > 1:
           emails.append(a_contact.split()[0])
           hostname.append(a_contact.split()[1])
           ip.append(a_contact.split()[2])
        else:
           emails.append(a_contact.split()[0])
           hostname.append(a_contact.split()[1])
           ip.append(a_contact.split()[2])
return emails, hostname, ip

我只想返回主机名和 IP 列表,这些列表将用于发送到从列表返回的指定电子邮件地址。任何人都可以帮助我如何轻松地完成它吗?谢谢。

最佳答案

首先安装validate_email模块具有:

$pip3 install validate_email

然后:

from validate_email import validate_email

result = {}
with open('file.txt') as f:
    for line in f:
        words = line.split()
        if validate_email(words[0]): # If first word of the line is a valid email, lets store data on the result dict using the email as key.
            email = words[0]
            words = words[1:]
        else:
            email = 'no_email'

        hosts_emails = [(words[i], words[i+1]) for i in range(0, len(words) - 1, 2)]
        (result.setdefault(email, [])).append(hosts_emails)

print(result)

输出:

{'no_email': [[('host1', '192.168.100.24')], [('host5', '192.168.100.24'), ('host9', '192.168.100.33')]], 'user1@abc.com': [[('host2', '192.168.100.45'), ('host7', '192.168.100.40'), ('host3', '192.168.100.34'), ('host4', '192.168.100.20')]], 'user2@xyz.com': [[('host8', '192.168.100.48'), ('host6', '192.168.100.43'), ('host10', '192.168.100.37')]]}

关于python - 如何在 Python 中将可变长度值追加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45951789/

相关文章:

Python - 排列和百分比

python - 数值求解非线性方程 - Python

Python,如何使用列表中输入的项目并使用它们来分配另一个值?是否可以

javascript - jQuery append 功能和调整大小

python - 根据范围匹配数据框观察

python - 如何将 'string list' 变成真正的列表?

Python:如何以 'readable' 方式编写此 python 单行代码?

Python矩阵(列表列表)到字典

python - 初始化字典中键/值对的最佳方法

list - 像这样 append 两个列表会返回一个列表而不是两个列表的 cons 单元格,这是什么情况?