我有一个csv文件,其中包含四列和许多行,每行代表不同的数据,例如
OID DID HODIS BEAR
1 34 67 98
我已经打开并阅读了csv文件,但是我不确定如何将每一列变成键。我相信我在代码中使用的以下格式最适合我正在创建的任务。
请在下面查看我的代码,对不起,如果解释有点混乱。 请注意,第1列中的#Values是我所坚持的,我不确定如何定义每列。
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)
答案 0 :(得分:0)
有一个很棒的用于字符串的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()
的默认参数(当不提供任何参数时使用默认参数)。
答案 1 :(得分: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
中使用简单的for循环,不需要知道键
如果关心空字典,那就这样做:
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}]
答案 2 :(得分:0)
另一种实现方法是使用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]