Разбор CSV на несколько отдельных словарей - PullRequest
0 голосов
/ 14 июля 2020

Я ищу способ через python взять только разделы CSV и поместить их в словари.

id,name,ipsubnet,mask,protocol,area,type,cost
101,default,10.1.1.0,255.255.255.0,ospf,0.0.0.0,ptp,1
102,servers2,10.1.2.0,255.255.255.0,ospf,0.0.0.0,,
103,server3,10.1.3.0,255.255.255.0,ospf,0.0.0.0,,
104,server4,10.1.4.0,255.255.255.0,ospf,0.0.0.0,,

У меня уже есть код, чтобы взять все это и сделать из него словарь и он отлично работает. Я пытаюсь, например, получить только ID и NAME, но игнорировать другие поля для словаря 1, а затем взять IPSU BNET, MASK, PROTOCOL в словарь 2.

Любая помощь будет отличной.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020
import pandas as pd

data_set = pd.read_csv("csv.file")

dic1 = {}
dic2 = {}
count = 0

for id, name in data_set[['id', 'name']].values:
    dic = {'id':id, 'name':name}
    dic1[count] = dic
    count = count + 1
    
count = 0

for  ipsubnet , mask, protocol, area ,type , cost in data_set[[ 'ipsubnet', 'mask' ,'protocol'  ,'area' ,'type' , 'cost']].values:
    dic = {'ipsubnet':ipsubnet, 'mask':mask ,'protocol':protocol  ,'area':area ,'type':type , 'cost':cost}
    dic2[count] = dic
    count = count + 1
0 голосов
/ 14 июля 2020

Добро пожаловать в Stack Overflow!

Я делаю некоторые предположения о вашей схеме, но я предполагаю, что вы хотите, чтобы она выглядела примерно так ...

d1 = {
   "101" : {
      "name" : "default"
   },
   "102" : {
      "name" : "servers2"
   }
   # etc...
}

d2 = {
   "101" : {
      "ipsubnet" : 10.1.1.0,
      "mask" : 255.255.255.0,
      # etc...
   }
   "102" : {
      # etc...
   }
}

Если в этом случае вы можете сделать что-то вроде этого:

# Use the `csv` library to pull in everything
import csv

data_rows = []

with open("your_csv_file.csv", newline="") as csvfile:
    reader = csv.reader(csvfile, delimiter=",")
    for row in reader:
        data_rows.append(row)

# Now you have everything in your data_rows variable
# Parse it out however you want

d1 = {}
d2 = {}

# Use data_rows[1:] to start at the first row of data and not the column headers
for row in data_rows[1:]:
    # Note the use of row[0] to grab the IP address as the index
    d1[row[0]] = {
        "name" : row[1]
    }

    # Do the same thing for d2, and grab the other variables you want
    d2[row[0]] = {
        "ipsubnet" : row[2],
        "mask" : row[3],
        # etc...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...