什么是从两个列表中获得不同的更好方法

时间:2012-11-16 16:17:49

标签: python

每次生成新文件时都会在一个目录中生成,例如一些日志文件。

我的目的是在10分钟内获得一定数量的文件。为了获得这样的实时值,数据如下:

  

00:00~00:10 10个文件

     

00:10~00:20 23档

     

.......

     

23:50~23:59 12档

所以我的想法是在Linux系统上通过crontab任务每10分钟运行一次统计脚本。 逻辑第一次运行脚本:通过glob.glob(“*”)获取当前文件列表。

让我说A,所以当脚本下次运行时(10分钟后),它将再次运行“glob”以获取当前文件列表B.我需要不同的值,在B.没有A.所以我可以获得金额。 怎么做 ?如果您有其他好方法,请分享。

2 个答案:

答案 0 :(得分:3)

您想查看sets。你可以这样做:

setA = set(listA)
setB = set(listB)
new_list = list(setB - setA)

您还可以执行其他设置逻辑来识别已删除的文件等。

答案 1 :(得分:0)

正如我对@ tcaswell的answer所评论的那样,使用Python的内置集合类是解决这类问题的绝佳方法。这里有一些示例代码,基于Tim Golden的Python Stuff文章Watch a Directory for Changes

import os

firstime = False
path_to_watch = '.'

try:
    with open('filelist.txt', 'rt') as filelist:
        before = set(line.strip() for line in filelist)
except IOError:
    before = set(os.listdir(path_to_watch))
    firstime = True

if firstime:
    after = before
else:
    after = set(os.listdir(path_to_watch))
    added = after-before
    removed = before-after
    if added:
        print 'Added: ', ', '.join(added)
    if removed:
        print 'Removed: ', ', '.join(removed)

# replace/create filelist
with open('filelist.txt', 'wt') as filelist:
    filelist.write('\n'.join(after) + '\n')