从CSV Python中读取特定列

时间:2015-08-03 21:00:35

标签: python

我正在尝试解析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提取所需的列。谢谢

1 个答案:

答案 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)