У меня есть файл журнала, который отформатирован следующим образом:
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'
Похоже, что лямбда-функция работает непосредственно со свойством «actionDate », а не передает полный кортеж.Если я изменю лямбду на:
lambda x,y: min(x, y)
Это работает так, как я и ожидал.Есть идеи, почему это так?