【问题标题】:Looping through a namedtuple遍历命名元组
【发布时间】:2017-01-12 12:23:23
【问题描述】:

我是 Python 菜鸟,但对编程并不陌生。我已经广泛搜索了 StackOverflow,但没有找到答案(或者不明白我找到了什么)。

这就是我想做的事情

  1. 从 CVS 文件(50 个字段)中获取信息并放入内存

  2. 循环浏览其他来源的信息

  3. 在每次迭代中,循环遍历 CSV 信息,找到我需要的内容,然后将其与其他来源的信息一起使用。

我想知道如何将 CSV 信息写入内存以及如何在另一个循环中循环遍历它

谢谢。

这是我走了多远

# -*- coding: UTF-8 -*-
import csv
from urllib import parse
from collections import namedtuple

# set up namedtuple structure
    ARecord = namedtuple('ArchiveRecord', ['id', 'post_author', 'post_date']) #plus 50 fields

# load csv info to memory 
with open("site-export.csv",encoding="utf-8") as csvfile:
    r = csv.reader(csvfile, delimiter='|', quotechar='"')
    for arch in map(ARecord._make, r):
        print(arch.id) #print to show that something is happening

# loop that gets info from other source
    # loop through csv info from memory 
        # get field values per row by name
        # do something together with info from both source

【问题讨论】:

  • 你想把你所有的ARecord实例放到一个列表中吗?
  • 对不起,我不明白这个问题。我想把所有的 CSV 信息放到内存中可以循环的东西中。我已经读过,namedtuple 是最好的方法。
  • @HananCohen 你可以考虑csv.DictReaderdocs.python.org/2/library/csv.html#csv.DictReader

标签: python csv namedtuple


【解决方案1】:
with open("site-export.csv",encoding="utf-8") as csvfile:
    r = csv.reader(csvfile, delimiter='|', quotechar='"')
    csvInfo = [ARecord._make(row) for row in r]

# loop that gets info from other source
    for arch in csvInfo:
        # use information in arch

【讨论】:

  • 谢谢@abukaj,这正是我想要的。
【解决方案2】:

您可以使用csv.DictReaderfieldnames 方法,您可以将列名放入列表中。

如果这些名称与您的 namedtuple 中的字段名称相同,那么您可以轻松访问它们。

namedtuple 可以使用_asdict() 返回其表示为字典的数据,然后您可以通过DictReader 返回的列名访问值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多