csv-fi中jinja中的变量列表

2024-10-03 13:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从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模板:

^{pr2}$

结果:

^{3}$

(仅csv中最后一个“列”中的项目)

但我需要:

frog
sun
face
nano

Tags: 文件csv项目名称模板jinja2nanoface
2条回答

我可以建议使用简单、优雅和灵活的方法来实现这一点,即借助字典,它可以将值存储为重复键的列表。请参见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))

该输出:

^{pr2}$

你需要这样的东西

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

在金贾使用这个

^{pr2}$

它会像这样显示

frog
sun
face
nano

相关问题 更多 >