Форум сайта python.su
Привет.
У меня есть два файла users.txt в котором каждая строка - это фамилия чела… и файл finance.txt в котором указана денежная сумма тоже в каждой строке (целое integer). То есть получается что:
f = open('users.txt', 'r+b')
f2 = open('finance.txt', 'r+b')
Офлайн
class UserFinanceWorker(object):
def __init__(self, users_db='users.txt', finance_db='finance.txt' ):
self.__users_db = users_db
self.__finance_db = finance_db
self.__inner_dict = collections.OrderedDict()
self.__load_db()
def __load_db(self):
users = self.__read_lines(self.__users_db)
finance = self.__read_lines(self.__finance_db)
if users and finance and ( len(users) == len(finance) ):
self.__inner_dict= collections.OrderedDict( zip( users, finance ) )
else:
raise TypeError("Files empty or contain different number of items")
def __read_lines(self, fname):
lines = list()
with open(fname) as fd:
for line in fd:
line = line.strip()
if line:
lines.append(line)
return lines
def __len__(self):
return len(self.__inner_dict)
def __setitem__(self, key, value):
self.__inner_dict[key] = str(value)
self.__update()
def __repr__(self):
return "\n".join([ "%s: %s"%(k,v) for k, v in self.__inner_dict.iteritems()])
def __update(self):
finance = "\n".join( self.__inner_dict.values() )
with open(self.__finance_db,'w') as fd:
fd.write(finance)
fd.flush()
WORK=1
test_db = UserFinanceWorker()
if test_db:
while WORK == 1:
print test_db
user = raw_input("Enter name: ")
summ = raw_input("Enter sum: " )
test_db[user] = summ
Отредактировано (Июль 12, 2011 18:09:45)
Офлайн
s0rgВы не пояснили условия при которых WORK становится 0, но я думаю тут и так понятноclass UserFinanceWorker(object):
def __init__(self, users_db='users.txt', finance_db='finance.txt' ):
self.__users_db = users_db
self.__finance_db = finance_db
self.__inner_dict = collections.OrderedDict()
self.__load_db()
def __load_db(self):
users = self.__read_lines(self.__users_db)
finance = self.__read_lines(self.__finance_db)
if users and finance and ( len(users) == len(finance) ):
self.__inner_dict= collections.OrderedDict( zip( users, finance ) )
else:
raise TypeError("Files empty or contain different number of items")
def __read_lines(self, fname):
lines = list()
with open(fname) as fd:
for line in fd:
line = line.strip()
if line:
lines.append(line)
return lines
def __len__(self):
return len(self.__inner_dict)
def __setitem__(self, key, value):
self.__inner_dict[key] = str(value)
self.__update()
def __repr__(self):
return "\n".join([ "%s: %s"%(k,v) for k, v in self.__inner_dict.iteritems()])
def __update(self):
finance = "\n".join( self.__inner_dict.values() )
with open(self.__finance_db,'w') as fd:
fd.write(finance)
fd.flush()
WORK=1
test_db = UserFinanceWorker()
if test_db:
while WORK == 1:
print test_db
user = raw_input("Enter name: ")
summ = raw_input("Enter sum: " )
test_db[user] = summ
s0rgНе запускается((( интерпретатор пишет:
Офлайн
ну так “import collections” поставить надо в начале файлика
Офлайн
Не запускается ((( Интерпретатор пишет:
Traceback (most recent call last):
File “prog.py”, line 45, in <module>
test_db = UserFinanceWorker()
File “prog.py”, line 7, in __init__
self.__inner_dict = collections.OrderedDict()
AttributeError: ‘module’ object has no attribute ‘OrderedDict’
Офлайн
Версия питона какая?
Офлайн
s0rgPython 2.6.6 (на ОС: Debian Squeeze)
Версия питона какая?
Офлайн
class UserFinanceWorker(object):
def __init__(self, users_db='users.txt', finance_db='finance.txt'):
self.__users_db = users_db
self.__finance_db = finance_db
self.__usr_and_fin = None
self.__load_db()
def __load_db(self):
users = self.__read_lines(self.__users_db)
finance = self.__read_lines(self.__finance_db)
self.__usr_and_fin = zip(users, finance)
def __read_lines(self, fname):
lines = list()
with open(fname) as fd:
for line in fd:
line = line.strip()
if line:
lines.append(line)
return lines
def __len__(self):
return len(self.__usr_and_fin)
def __setitem__(self, key, value):
for idx, usr_fin in enumerate(self.__usr_and_fin):
usr, fin = usr_fin
if key == usr:
self.__usr_and_fin[idx] = (usr, value)
self.__update()
break
else:
print "User: %s not found!" % key
def __repr__(self):
return "\n".join([ "%s: %s" % (k, v) for k, v in self.__usr_and_fin])
def __update(self):
finance = "\n".join([fin for _, fin in self.__usr_and_fin])
with open(self.__finance_db, 'w') as fd:
fd.write(finance)
fd.flush()
WORK = 1
test_db = UserFinanceWorker()
if test_db:
while WORK == 1:
print test_db
user = raw_input("Enter name: ")
summ = raw_input("Enter sum: ")
test_db[user] = summ
Офлайн
Проверять пока не стал) Воспользовался классом ConfigParser ))) хехе) сохранил данные рабочих и их финансы в одном файле. С классом ConfigParser все было просто)) хехе
Офлайн