我的基本要求是将数据提供给API,以便在系统上创建和删除用户.API有自己的格式,用于获取数据.API有两个步骤:
输入数据格式如下:
Device1 192.168.1.2 NEW:jason:OPERATOR NEW:kylie:ADMINISTRATOR DELETE:ron:OPERATOR
Device2 10.12.34.12 NEW:kim:OPERATOR DELETE:joe:USER_ROLE_GUEST
Device3 12.3.21.45
Device4 8.21.34.25 DELETE:alex:USER_ROLE_GUEST
API格式如下(第一行数据的示例):
b = bigsuds.BIGIP(hostname = '192.168.1.2', username = 'admin', password = 'letmein')
b.Mgmt.UserMgmt.create_user([{'user': {'name': 'jason'},
'password': {'password': 'letmein'},
'permissions': [{'role': 'USER_ROLE_GUEST'}],
'login_shell': '/sbin/nologin'},
{'user': {'name': 'kylie'},
'password': {'password': 'letmein'},
'permissions': [{'role': 'ADMINISTRATOR'}],
'login_shell': '/sbin/bash'}])
b.Mgmt.UserMgmt.delete_user(['ron'])
密码始终是固定值。登录shell值由此字典决定:
find_shell = {'USER_ROLE_GUEST':'/sbin/nologin', 'OPERATOR':'/var/tmp', 'ADMINISTRATOR':'/sbin/bash'}
我想要的是循环文件的每一行,连接到IP地址,执行添加或删除或完全跳过IP(如果没有用户添加或删除)。这理想情况下由我完成使用readlines(),将其拆分为列,然后使用列索引执行必要的操作。但是,此处列长度不固定。除了始终固定的前2列,从示例数据中可以看出,其余的列总是在变化。实现这一目标的最理想方式是什么?
答案 0 :(得分:1)
也许是这样的:
with open(filename) as file:
input_data = file.readlines()
for line in input_data:
columns = line.strip().split(' ')
if len(columns)<3:
continue
device = columns[0]
IP_address = columns[1]
actions = columns[2:]
open_connection(IP_address) #whatever this may be
for action in actions:
perform_action(action) #whatever this may be
如果前两列是固定的,那么列[2:]将包含您应该执行的命令。只需确保过滤只有2列的情况。
您并不特别需要字典来将行拆分为列。