Создание словаря из файла CVS с использованием списков - PullRequest
0 голосов
/ 16 октября 2018

У меня есть файл CSV, который содержит четыре столбца и много строк, каждая из которых представляет разные данные, например,

OID DID HODIS BEAR

 1  34   67    98

Я уже открыл и прочитал файл CSV, однако я не уверен, как я могу сделать каждыйстолбец в ключ.Я считаю, что следующий формат, который я использовал в коде, лучше всего подходит для задачи, которую я создаю.

Пожалуйста, смотрите мой код ниже, извините, если объяснение немного сбивает с толку.Обратите внимание, что # значения в столбце 1 - это то, на чем я застрял, я не уверен, как определить каждый столбец.

for line in file_2:
    the_dict = {}
    OID = line.strip().split(',')
    DID = line.strip().split(',')
    HODIS = line.strip().split(',')
    BEAR = line.strip().split(',')

    the_dict['KeyOID'] = OID
    the_dict['KeyDID'] = DID
    the_dict['KeyHODIS'] = HODIS
    the_dict['KeyBEAR'] = BEAR

    dictionary_list.append(the_dict)

print(dictionary_list)

image

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Я бы сказал, что это весь код:

lod = []
with open(file,'r') as f:
   l=f.readlines()
   for i in l[1:]:
      lod.append(dict(zip(l[0].rstrip().split(),i.split())))

split не нуждается в параметре, просто используйте простой цикл for в with open, не нужно знать ключи

И если вам нужны пустые словари:

lod=list(filter(None,lod))
print(lod)

Вывод:

[{'OID': '1', 'DID': '34', 'HODIS': '67', 'BEAR': '98'}]

Если хотите целые числа:

lod=[{k:int(v) for k,v in i.items()} for i in lod]
print(lod)

Вывод:

[{'OID': 1, 'DID': 34, 'HODIS': 67, 'BEAR': 98}]
0 голосов
/ 16 октября 2018

Еще один способ сделать это - использовать библиотеки, такие как Pandas, которые эффективны при работе с табличными данными.Это быстро, так как мы избегаем петель.В приведенном ниже примере вам нужны только Pandas и имя файла CSV.Я использовал io просто для преобразования строковых данных в мнемосхему csv.

import pandas as pd
from io import StringIO

data=StringIO('''
OID,DID,HODIS,BEAR\n
1,34,67,98''') #mimic csv file

df = pd.read_csv(data,sep=',')

print(df.T.to_dict()[0])

В нижней части вам нужен только один вкладыш, который объединяет команды.Прочитать CSV, транспонировать и преобразовать в словарь:

import pandas as pd
csv_dict = pd.read_csv('mycsv.csv',sep=',').T.to_dict()[0]
0 голосов
/ 16 октября 2018

Существует замечательная функция Python для строк, которая разбивает строки на основе разделителя, .split(delim), где delim - разделитель, и возвращает их в виде списка.

Из кода, который у вас есть на скриншоте, вы можете использовать следующий код для разделения на ,, который, как я полагаю, является вашим разделителем, потому что вы сказали, что ваш файл является CSV.

...
for line in file_contents_2:
    the_dict = {}
    values = line.strip().split(',')
    OID = values[0]
    DID = values[1]
    HODIS = values[2]
    BEAR = values[3]
...

Кроме того, в случае, если вам когда-либо потребуется разделить строку на основе пробелов, это аргумент по умолчанию для .split() (аргумент по умолчанию используется, если аргумент не предоставлен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...