我有一個是通過以下方式格式化的日誌文件:在python中的「減少」功能不工作在「namedtuple」?
datetimestring \t username \t transactionName \r\n
我試圖運行在該數據集的一些統計數據。我有以下代碼:
import time
import collections
file = open('Log.txt', 'r')
TransactionData = collections.namedtuple('TransactionData', ['transactionDate', 'user', 'transactionName'])
transactions = list()
for line in file:
fields = line.split('\t')
transactionDate = time.strptime(fields[0], '%Y-%m-%d %H:%M:%S')
user = fields[1]
transactionName = fields[2]
transdata = TransactionData(transactionDate, user, transactionName)
transactions.append(transdata)
file.close()
minDate = reduce(lambda x,y: min(x.transactionDate, y.transactionDate), transactions)
print minDate
我不想定義一個類這樣一個簡單的數據集,所以我使用的名稱元組。當我嘗試運行,我得到這個錯誤:
Traceback (most recent call last):
File "inquiriesStat.py", line 20, in <module>
minDate = reduce(lambda x,y: min(x.transactionDate, y.transactionDate), transactions)
File "inquiriesStat.py", line 20, in <lambda>
minDate = reduce(lambda x,y: min(x.transactionDate, y.transactionDate), transactions)
AttributeError: 'time.struct_time' object has no attribute 'transactionDate'
看來,lambda函數是在「transactionDate」性質而工作,而不是直接傳遞完整的元組。如果我將lambda更改爲:
lambda x,y: min(x, y)
它按我的預期工作。任何想法,爲什麼會是這種情況?
我相信一個沒有'reduce'的世界...... – JBernardo