usr bin python coding utf-8 import tempfile import cPickle as pickle i

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/python
# -*- coding: utf-8 -*-
import tempfile
import cPickle as pickle
import os
def main():
# загружаем новости (имя_файла, размер_очереди_группы)
news = NewsFIFO('test.pickle', 5)
# добавляем новость в общую группу
news.add('Новость')
# добавляем новость в группу с сохранением
news.add('Новость 1', 'pissing').save()
# получаем список новостей общей группы
print news['_main_']
# получаем список новостей определённой группы
print news['pissing']
class NewsFIFO(dict):
''' Словарь новостей по группам '''
def __init__(self, fn, size):
dict.__init__(self)
self.fn = fn
self.size = size
try:
self.load()
except IOError:
self['_main_'] = []
def add(self, msg, group=None):
''' добавляем новость в группу '''
# добавляем в общую группу
self['_main_'].append(msg)
l = len(self['_main_'])
if l > self.size:
self['_main_'] = self['_main_'][l - self.size : ]
# добавляем в отдельную группу
if group:
try:
self[group].append(msg)
l = len(self[group])
if l > self.size:
self[group] = self[group][l - self.size : ]
except KeyError:
self[group] = [msg]
return self
def save(self):
''' сохраняем словарь в файл '''
f = open(tempfile.mkstemp(dir=os.path.dirname(os.path.abspath(self.fn)))[1], 'w')
pickle.dump(self.items(), f)
f.close()
os.rename(f.name, self.fn)
return self
def load(self):
''' загружаем словарь из файла '''
f = open(self.fn)
dump = f.read()
f.close()
self.clear()
for k, v in pickle.loads(dump):
self[k] = v
return self
if __name__ == "__main__":
main()