2015-03-02 141 views
-1

我的基本要求是将数据提供给一个API,该API创建和删除系统上的用户.API有它自己的格式,它将采取数据。API 2个步骤:从变量列的文本文件创建一个python字典

  1. 连接到系统
  2. 创建/所述的输入数据格式如下所示输入文件

删除用户/用户按照数据:

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

为什么反对票? – Amistad 2015-03-02 14:26:00

回答

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列的情况。

你并不特别需要一本词典来将你的行分成列。

+0

@ Daan..this真的很好..actions = columns [2:]是我特意找的..谢谢 – Amistad 2015-03-02 14:55:35