【问题标题】:Import Data Into Namedtuple in Python在 Python 中将数据导入命名元组
【发布时间】:2014-02-07 08:07:48
【问题描述】:

我正在尝试将数据导入命名元组。数据非常大,我需要有效地导入它。我在努力

myData = namedtuple('myData', 'div, name, val')

csv.register_dialect('mycsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('demand.txt', 'rb') as f:
     reader = csv.reader(f,'mycsv')

此后:

  • 如何将 demand.txt 中的整个表批量导入到 namedtuple 中?我看到了一些带有 for 循环的解决方案,但我想这是低效的。

  • 我希望能够获取一个字段下的所有值,例如当我键入 data.div 时?正确的格式应该是命名元组的元组吗?

【问题讨论】:

    标签: python csv import namedtuple large-data


    【解决方案1】:

    要获取 myData 元组的列表,请执行以下操作:

    data = map(myData._make, reader) # or [myData._make(r) for r in reader]
    

    获取特定字段的所有值:

    from operator import attrgetter
    data_divs = map(attrgetter('div'), data) # or [r.div for r in data]
    

    但是,如果您关心效率,您应该知道使用命名元组的属性访问比索引访问慢几倍。这会更快:

    from operator import itemgetter
    div_idx = myData._fields.index('div')
    data_divs = map(itemgetter(div_idx), data) # or [r[div_idx] for r in data]
    

    两者都产生相同的值列表。

    【讨论】:

      【解决方案2】:

      请参阅下面使用命名元组的示例代码 sn-p。

      from csv import reader
      from collections import namedtuple
      
      saleRecord = namedtuple('saleRecord','shopId saleDate totalSales totalCustomers')
      fileHandle = open("salesRecord.csv","r")
      csvFieldsList=csv.reader(fileHandle)
      for fieldsList in csvFieldsList:
          shopRec = saleRecord._make(fieldsList)
          overAllSales += shopRec.totalSales;
      
      print("Total Sales of The Retail Chain =",overAllSales)
      

      请参考我博客中关于 Python 集合的文章: https://techietweak.wordpress.com/2015/11/11/python-collections/

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-08-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2021-10-03
        • 2019-06-20
        • 2016-03-03
        • 1970-01-01
        • 2017-01-25
        相关资源
        最近更新 更多