从可变列的文本文件创建python字典

时间:2015-03-02 14:18:40

标签: python for-loop dictionary

我的基本要求是将数据提供给API,以便在系统上创建和删除用户.API有自己的格式,用于获取数据.API有两个步骤:

  1. 连接到系统
  2. 根据输入文件中的数据创建/删除用户/用户
  3. 输入数据格式如下:

    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列,从示例数据中可以看出,其余的列总是在变化。实现这一目标的最理想方式是什么?

1 个答案:

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

您并不特别需要字典来将行拆分为列。

相关问题