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//123
Code: 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'