【问题标题】:Python select specific column values from enumeration list based on column index listPython根据列索引列表从枚举列表中选择特定列值
【发布时间】:2017-04-08 00:20:21
【问题描述】:

在下面的代码中:我正在读取一个文件,获取标题行,查找特定的标题列并存储它们的索引。然后我遍历其余的行,只想要那些索引的值。

    import csv       
def csvReader(csvFileName):
    counter = 10
    keyMap = []
    header = ["Test1","Test2"]
    with open(csvFileName,'r') as f:
        reader = csv.reader(f,skipinitialspace=True)
        Firstline = True
        print(reader)
        for row in reader:
            if counter > 0 and Firstline == True:
                print(list(enumerate(row)))
                indexes =[i for i, j in enumerate(row) if j in header]
                print(indexes)
                Firstline=False
                counter = counter - 1
            elif counter > 0:
                a = dict(zip(header, map((lambda str: row[i] for i in indexes) ,row)))
                print(a)
                print('test')
                counter = counter - 1
        return keyMap   
if __name__ == '__main__':
    csvReader("C:/Test.csv")

【问题讨论】:

  • 您的代码中发生了很多奇怪的事情。您正在使用列表推导,但从不捕获列表!所以实际上,他们什么都不做。您还可以在没有参数的情况下调用 .append... 这应该会引发错误。我不太理解您对您正在尝试做什么的描述,因为它有点模糊,但它听起来可能相对简单。为什么不尝试给出示例输入和输出?
  • 另外,counter 没有定义。以及为什么要从计数器中减去!
  • 您只是想从 CSV 中提取特定列吗?
  • 我粘贴了完整的代码 sn-p,是的,我正在尝试从 csv 中提取特定的列。
  • 这是我要修复的行,以便:我只得到特定的列值。 a = dict(zip(header, map((lambda str: row[i] for i in index) ,row)))

标签: python python-3.x


【解决方案1】:

伙计们-感谢您的回复。我刚刚修好了。通过更改为以下:

a = dict(zip(header, map(str, (row[i] for i in indexes))))

但如果有更好的解决方案,请分享。

【讨论】:

  • 既然你已经在使用推导式,你就不需要map()(str(row[i]) for i in indexes) 就足够了
  • 如果您只是想从 csv 中选择特定的列,那么您的整个方法就被过度设计了。假设您提前知道列名,您可以简单地执行reader = csv.DictReader(f) 然后类似data = [(r['Test1'],r['Test2']) for r in reader] 假设您希望您的字段在一个元组中。如果你想要dicts 中的list,类似于data = [{f:r[f] for f in header} for r in reader]
  • 感谢 pylanf 和 juanpa;我会试试看..!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2020-04-03
  • 2011-03-11
  • 2019-06-05
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多