我正在尝试解析CSV文件并从CSV中提取几列。
ID | Code | Phase |FBB | AM | Development status | AN REMARKS | stem | year | IN -NAME |IN Year |Company
L2106538 |Rs124 | 4 | | | Unknown | | -pre- | 1982 | Domoedne | 1982 | XYZ
我想分组并提取几列,以便将它们上传到不同的模型。
例如,我想将前3列分组到模型中,接下来两列分组到不同的模型,第一列和6,7分组到不同的模型,依此类推。
我还需要保留文件的标题并将数据存储为键值对,以便我知道哪个列应该用于模型中的特定字段。
这是我到目前为止所拥有的。
def group_header_value(file):
reader = csv.DictReader(open(file, 'r'))# to have the header and get the data as a key value pair.
all_result= []
for row in reader:
print row
all_result.append(row)
return all_result
def group_by_models(all_results):
MD = range(1,3) # to get the required cols.
for every_row in all_results:
contents = [(every_row[i] for i in MD)]
print contents
def handle(self, *args, **options):
database = options.get('database')
filename = options.get('filename')
all_results = group_header_value(filename)
print 'grouped_bymodel', group_by_models(all_results)
这是我试图获取内容时得到的结果 grouped_by model:at 0x7f9f5382e0f0> 在0x7f9f5382e0a0> 在0x7f9f5382e0f0>
在DictReader中提取特定列是否有不同的方法?我怎样才能使用DictReader提取所需的列。谢谢
答案 0 :(得分:1)
(every_row[i] for i in MD)
是generator expression。生成器表达式的语法(大部分)与list comprehension的语法相同,除了生成器表达式用括号(...)
括起,而列表推导使用括号[...]
。
[(every_row[i] for i in MD)]
是一个包含一个元素的列表,即生成器表达式。
要使用最少的更改来修复代码,请删除括号:
def group_by_models(all_results):
MD = range(1,3) # to get the required cols.
for every_row in all_results:
contents = [every_row[i] for i in MD]
print(contents)
您还可以通过group_by_models
参数使MD
更具可重用性:
def group_by_models(all_results, MD=range(3)):
for every_row in all_results:
contents = [every_row[i] for i in MD]
print(contents)