我有一个CSV文件,其中包含我读入字典中特定位置的特定值的列,以及与单个完整字典相等的数据实例。我读入然后使用这些数据计算某些值,处理每行的一些输入等,然后再转到下一行。我的问题是,如果我有一个特定列名称的标题(Key1与Key 3A等),我可以使用该信息来避免我目前正在使用的某些代码(下图)。
with open(input_file, 'rU') as controlFile:
reader = csv.reader(controlFile)
next(reader, None) # skip the headers
for row in reader:
# Grabbing all the necessary inputs
inputDict = {}
inputDict["key1"] = row[0]
inputDict["key2"] = row[1]
inputDict["key3"] = {}
inputDict["key3"].update({"A" : row[2]})
inputDict["key3"].update({"B" : row[3]})
inputDict["key3"].update({"C" : row[4]})
inputDict["key3"].update({"D" : row[5]})
inputDict["key3"].update({"E" : row[6]})
inputDict["Key4"] = {}
inputDict["Key4"].update({"F" : row[7]})
inputDict["Key4"].update({"G" : float(row[8])})
inputDict["Key4"].update({"H" : row[9]})
答案 0 :(得分:2)
如果您使用DictReader
,则可以稍微改进一下代码:
创建一个像普通读者一样操作的对象,但是映射它 读入dict的信息,其密钥由可选项给出 fieldnames参数。 fieldnames参数是一个序列 元素按顺序与输入数据的字段相关联。 这些元素成为结果字典的关键。如果 fieldnames参数被省略,第一行的值为 csvfile将用作字段名。
所以,如果我们利用它:
import csv
import string
results = []
mappings = [
[(string.ascii_uppercase[i-2], i) for i in range(2, 7)],
[(string.ascii_uppercase[i-2], i) for i in range(7, 10)]]
with open(input_file, 'rU') as control_file:
reader = csv.DictReader(control_file)
for row in reader:
row_data = {}
row_data['key1'] = row['key1']
row_data['key2'] = row['key2']
row_data['key3'] = {k:row[v] for k,v in mappings[0]}
row_data['key4'] = {k:row[v] for k,v in mappings[1]}
results.append(row_data)
答案 1 :(得分:0)
是的,你可以。
import csv
with open(infile, 'rU') as infile:
reader = csv.DictReader(infile)
for row in reader:
print(row)
答案 2 :(得分:0)
看看这段代码。
fields = csv_data.next()
for row in csv_data:
parsed_data.append(dict(zip(fields,row)))