Guest User

Untitled

a guest
Dec 7th, 2017
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.25 KB | None | 0 0
  1. import time
  2. import operator
  3.  
  4. def main():
  5.     t0 = time.time()
  6.     vlans, requests = load_files()
  7.     total = len(requests)
  8.     with_redundancy = sum(e[1] for e in requests)
  9.     no_redundancy = total - with_redundancy
  10.     output_rows = no_redundancy + with_redundancy * 2
  11.     out = [None] * output_rows
  12.  
  13.     no_red_start = 0
  14.     with_red_start = 0
  15.     idx = 0
  16.     t1 = time.time()
  17.     by_vlan_id = sorted(vlans, key=operator.itemgetter(2,0))
  18.     for reqn, red in requests:
  19.         if red:
  20.             dev_id, vlan_id, with_red_start = next_with_redundancy(by_vlan_id, with_red_start)
  21.             out[idx] = [reqn, dev_id, 0, vlan_id]
  22.             out[idx+1] = [reqn, dev_id, 1, vlan_id]
  23.             idx += 2
  24.         else:
  25.             dev_id, vlan_id, no_red_start = next_no_redundancy(by_vlan_id, no_red_start)
  26.             out[idx] = [reqn, dev_id, 1, vlan_id]
  27.             idx += 1
  28.     t2 = time.time()
  29.     with open("output_py.csv", 'w') as f:
  30.         f.write('request_id,device_id,primary_port,vlan_id\n')
  31.         for line in out:
  32.             f.write("%d,%d,%d,%d\n" % tuple(line))
  33.     t3 = time.time()   
  34.     print("total %.2fsec: reading: %dms, processing: %dms, writing: %dms" % (
  35.         t3 - t0, (t1 - t0) * 1000, (t2 - t1) * 1000, (t3 - t2) * 1000))
  36.  
  37. def next_no_redundancy(vlan_info, start):
  38.     while True:
  39.         info = vlan_info[start]
  40.         start += 1
  41.         if not info[2]:
  42.             continue
  43.         if info[1]:
  44.             dev_id = info[0]
  45.             vlan_id = info[2]
  46.             info[2] = 0
  47.             return dev_id, vlan_id, start
  48.  
  49. def next_with_redundancy(vlan_info, start):
  50.     dev_id, vlan_id, primary, secondary = None, None, None, None
  51.     while True:
  52.         info = vlan_info[start]
  53.         start += 1
  54.         if not info[2]:
  55.             continue
  56.         if dev_id is None or info[0] != dev_id or info[2] != vlan_id:
  57.             dev_id = info[0]
  58.             vlan_id = info[2]
  59.             primary, secondary = None, None
  60.         if info[1]:
  61.             primary = start-1
  62.         else:
  63.             secondary = start-1
  64.         if primary is not None and secondary is not None:
  65.             vlan_info[primary][2] = 0
  66.             vlan_info[secondary][2] = 0
  67.             return dev_id, vlan_id, start
  68.  
  69. def load_files():
  70.     vlans = []
  71.     requests = []
  72.     with open('vlans.csv') as f:
  73.         f.readline()
  74.         for line in f.readlines():
  75.             vlans.append([int(e) for e in line.split(",")])
  76.     with open('requests.csv') as f:
  77.         f.readline()
  78.         for line in f.readlines():
  79.             requests.append([int(e) for e in line.split(",")])
  80.     return vlans, requests
  81.  
  82. if __name__ == "__main__":
  83.     m
Advertisement
Add Comment
Please, Sign In to add comment