【发布时间】:2012-01-06 03:36:51
【问题描述】:
我正在读取名为 A 和 B 的两个文件(日期时间列表)。(不一定按顺序)
我想将这些日期时间的列表创建为对象:
class AB(object):
def __init__(self, datetime, a=False, b=False):
self.datetime = datetime
self.a = a
self.b = b
如果日期时间存在于文件 A 中,a 应设置为真,如果日期时间存在于文件 B 中,则 b 为真。(否则为假)
例如:
文件 A:20111225、20111226
文件B:20111225、20111227
对象列表应该是:
AB(20111225, a = true, b = true)
AB(20111226, a = true, b = false)
AB(20111227, a = false, b = true)
目前:
我正在阅读文件 A,将日期时间放入 listA:
listObjects = []
fileA = open(A.log, 'rb')
listA = []
for line in fileA:
try:
dt = datetime.strptime(line, "%Y%m%d")
except Exception, e:
continue
else:
listA.append(dt)
然后读取文件 B,检查 listA 中是否存在每个项目,并将 B-only 和 A+B 项目添加到 listObjects:
fileB = open(B.log, 'rb')
for line in fileB:
try:
dt = datetime.strptime(line, "%Y%m%d")
except Exception, e:
continue
else:
if dt in listA:
listA.remove(dt)
listObjects.append(AB(dt, a=True, b=True))
else:
listObjects.append(AB(dt, a=False, b=True))
然后我遍历列表 A,添加剩余的仅 A 项:
for dt in listA:
listObjects.append(AB(dt, a=True, b=False))
然后按日期时间对列表进行排序:
shutdowns.sort(key=lambda x: x.datetime)
有没有更好的方法来做到这一点?这似乎有点笨拙,随着文件长度的增加,它会成倍地变慢。
我知道您可以使用 set(A) 和 set(B) 获得列表的交集 - 我应该使用这个吗?
【问题讨论】:
标签: python list datetime compare