我需要从CSV文件中打印jinja2模板中所有具有相同列名的项目
csv文件:
some1,letter,letter,letter,letter,some2
1,f,r,o,g,z
q,s,u,n,,a
a,f,a,c,e,q
z,n,a,n,o,1
我尝试使用此jinj2模板:
{% for item in letter %}{{ item }}{% endfor %}
和结果:
g
e
o
(仅来自csv中最后一个“列”中的项)
但我需要:
frog
sun
face
nano
答案 0 :(得分:1)
我可以建议使用字典的简单,优雅和灵活的方法,该字典可以将值存储为重复键的列表。有关此类字典类,请参见this SO answer。但是此类的实现可能有所不同,我不坚持认为这是最好的。
import csv
import os
from itertools import groupby
class DictList(dict):
def __init__(self, iterable, **kwargs):
super(DictList, self).__init__()
for k, v in iterable:
self[k] = v
self.update(**kwargs)
def __setitem__(self, key, value):
try:
# Assumes there is a list on the key
self[key].append(value)
except KeyError: # if fails because there is no key
super(DictList, self).__setitem__(key, value)
except AttributeError: # if fails because it is not a list
super(DictList, self).__setitem__(key, [self[key], value])
with open('test.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
header = next(reader)
for row in reader:
variables = DictList(zip(header, row))
这将输出:
{'some1': '1', 'letter': ['f', 'r', 'o', 'g'], 'some2': 'z'}
{'some1': 'q', 'letter': ['s', 'u', 'n', ''], 'some2': 'a'}
{'some1': 'a', 'letter': ['f', 'a', 'c', 'e'], 'some2': 'q'}
{'some1': 'z', 'letter': ['n', 'a', 'n', 'o'], 'some2': '1'}
答案 1 :(得分:0)
您需要这样的东西
import csv
with open('test.csv') as csv_file:
data_lst = list(csv.reader(csv_file, delimiter=','))
items = []
data_without_header = data_lst[1:]
for row in data_without_header:
items.append("".join(row))
在Jinja中使用
{% for item in items %}{{ item }}{% endfor %}
它会这样显示
frog
sun
face
nano