2014-01-17 26 views
2

我正在尝试将数据导入namedtuple。数据非常大,我需要高效导入它。我想在Python中将数据导入到Namedtuple中

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?正确的格式应该是namedtuples的元组吗?

回答

3

要获得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] 

不过,如果你关心效率,您应该意识到使用具有namedtuples的属性访问比索引访问慢几倍。这将更快:

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] 

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

0

请使用namedtuple在下面看到我的示例代码片段。 https://techietweak.wordpress.com/2015/11/11/python-collections/

希望这有助于:

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的收藏品。