从CSV Python读取特定列

从CSV Python读取特定列,python,Python,我试图解析一个CSV文件并从CSV中提取几列 ID | Code | Phase |FBB | AM | Development status | AN REMARKS | stem | year | IN -NAME |IN Year |Company L2106538 |Rs124 |

我试图解析一个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)
这就是我在尝试获取内容时得到的结果 按型号分组:在0x7f9f5382e0f0> 在0x7f9f5382e0a0> 在0x7f9f5382e0f0>

在DictReader中提取特定列有不同的方法吗?如何使用DictReader提取所需的列。谢谢

(MD中的每一行[i]都是i)
是一个。生成器表达式的语法(大部分)与的语法相同,只是生成器表达式用括号括起来,
(…)
,而列表理解使用括号,
[…]

[(MD中每行[i]代表i)]
是一个包含一个元素的列表,即生成器表达式

要以最小的更改修复代码,请删除括号:

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)

您还可以通过将
MD
设置为一个参数,使
groupby\u模型
更加可重用:

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)

抱歉@unutbu,但这不起作用。我得到keyerror:1Hi,如果有比使用DictReader更好的方法,我可以相应地更改代码。我是Python初学者,如果
1
不是dict中的一个键,
每行
,我将非常感谢您的帮助。请记住,如果使用
DictReader
,则每一行都是一个dict,其键是标题中给出的字段名。如果前三个字段名是
'ID',code','Phase'
,那么您可以按模型调用
分组(所有结果,MD=['ID','code','Phase'])
。或者,使用
csv.reader
而不是
csv.reader
。然后,行将是列表,然后您可以使用
group\u by\u models(all\u results,MD=range(3))
来访问前三个字段。我可以知道投反对票的原因吗?