다음과 같은 형식으로 로그 파일이 있습니다.파이썬에서 "reduce"함수가 "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
그런 간단한 데이터 셋을위한 클래스를 정의하고 싶지 않았다. 그래서 이름 튜플을 사용했다. 실행하려고하면이 오류가 발생합니다. xtx56
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'
람다 함수가 전체 튜플을 전달하는 대신 직접 'transactionDate'속성에서 작동하는 것으로 보입니다. 람다를 다음과 같이 변경하면 :
lambda x,y: min(x, y)
예상대로 작동합니다. 이것이 왜 그런가?
나는'reduce' ... – JBernardo