Code: Alles auswählen
#!/usr/bin/python
from __future__ import with_statement
from collections import defaultdict
IFS = '//'
class TagDB:
    def addtag(self, fname_obj, taglist):
        if isinstance(fname_obj, list):
            for fname in fname_obj:
                for tag in taglist:
                    self.filetag[fname].add(tag)
                    self.tagfile[tag].add(fname)
        else:
            for tag in taglist:
                self.filetag[fname_obj].add(tag)
                self.tagfile[tag].add(fname_obj)
    def deltag(self, fname_obj, taglist):
        if isinstance(fname_obj, list):
            for fname in fname_obj:
                for tag in taglist:
                    self.filetag[fname].discard(tag)
                    self.tagfile[tag].discard(fname)
        else:
            for tag in taglist:
                self.filetag[fname_obj].discard(tag)
                self.tagfile[tag].discard(fname_obj)
    def load_db_fromfile(self, dbfile):
        with open(dbfile, 'r') as tagdb:
            for line in tagdb:
                line = line.rsplit('\n')[0].split(IFS)
                fname = line[0]
                tags = list(set(line[1:]))
                self.addtag(fname, tags)
    def __init__(self, dbfile=None, filetag=None, tagfile=None):
        if dbfile is None:
            if filetag is None:
                self.filetag = defaultdict(set)
            else:
                self.filetag = filetag
            if tagfile is None:
                self.tagfile = defaultdict(set)
            else:
                self.tagfile = tagfile
        else:
            self.load_db_fromfile(self, dbfile)
### main programm ###
myTagDB = TagDB(dbfile='tagdb')
print myTagDB.filetag, myTagDB.tagfile
Code: Alles auswählen
/path/to/myfile//tag1//tag2//tag3//test//abc//123
./yourfile//test//tag3//123Code: Alles auswählen
# ./tagger
Traceback (most recent call last):
  File "./tagger", line 54, in <module>
    myTagDB = TagDB(dbfile='tagdb')
  File "./tagger", line 50, in __init__
    self.load_db_fromfile(self, dbfile)
AttributeError: TagDB instance has no attribute 'load_db_fromfile'