У меня есть файл csv, который содержит четыре столбца и много строк, каждый из которых представляет разные данные, например
OID DID HODIS BEAR
1 34 67 98
Я уже открыл и прочитал файл csv, однако я не уверен, как сделать каждый столбец ключом. Я считаю, что следующий формат, который я использовал в коде, лучше всего подходит для задачи, которую я создаю.
Пожалуйста, см. Мой код ниже, извините, если объяснение немного запутанно. Обратите внимание, что #Values в столбце 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)
Существует отличная функция 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()
(аргумент по умолчанию используется, когда аргумент не предоставляется).
Другой способ сделать это - использовать библиотеки, такие как 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]
Я бы сказал, что это целый код:
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
не нужен параметр, просто используйте простой для цикла 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}]
line.strip().split(',')
. Я думаю, что вы можете забрать оттуда; р{}
stackoverflow