从CSV Python读取特定列
我试图解析一个CSV文件并从CSV中提取几列从CSV Python读取特定列,python,Python,我试图解析一个CSV文件并从CSV中提取几列 ID | Code | Phase |FBB | AM | Development status | AN REMARKS | stem | year | IN -NAME |IN Year |Company L2106538 |Rs124 |
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))
来访问前三个字段。我可以知道投反对票的原因吗?