Уведомления

Группа в Telegram: @pythonsu

#1 Июль 12, 2011 16:11:01

sashog
От:
Зарегистрирован: 2011-07-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

Привет.
У меня есть два файла users.txt в котором каждая строка - это фамилия чела… и файл finance.txt в котором указана денежная сумма тоже в каждой строке (целое integer). То есть получается что:

f = open('users.txt', 'r+b')
f2 = open('finance.txt', 'r+b')
например первая строка файла users.txt соответствует денежной сумме, которая указана в первой строке файла finance.txt . То есть каждая фамилия напротив соответствующего числа. (только в разных файлах).

мне такой нужен алгоритм:
1) открыть эти два файла для чтения и записи

2) найти определенную фамилию в файле users.txt, занести в список list1
3) занести езмененное число денежной суммы, относящемуся к этой фамилии, в файле finance.txt, соответсвтующее фамилии из файла users.txt
4) сохранить оба файла

повторять шаги с 1 по 4 до тех пор, пока глобальная переменная WORK == 1

5) if WORK == 0: break

воть) мне нужен полностью рабочий код) помогите)



Офлайн

#2 Июль 12, 2011 17:46:10

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

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
Вы не пояснили условия при которых WORK становится 0, но я думаю тут и так понятно

Отредактировано (Июль 12, 2011 18:09:45)

Офлайн

#3 Июль 12, 2011 18:25:38

sashog
От:
Зарегистрирован: 2011-07-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

s0rg
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
Вы не пояснили условия при которых WORK становится 0, но я думаю тут и так понятно
s0rg
Не запускается((( интерпретатор пишет:

Traceback (most recent call last):
File “prog.py”, line 43, in <module>
test_db = UserFinanceWorker()
File “prog.py”, line 5, in __init__
self.__inner_dict = collections.OrderedDict()
NameError: global name ‘collections’ is not defined



Офлайн

#4 Июль 13, 2011 12:55:30

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

ну так “import collections” поставить надо в начале файлика

Офлайн

#5 Июль 14, 2011 17:16:26

sashog
От:
Зарегистрирован: 2011-07-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

Не запускается ((( Интерпретатор пишет:
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’



Офлайн

#6 Июль 15, 2011 08:58:37

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

Версия питона какая?

Офлайн

#7 Июль 19, 2011 18:08:15

sashog
От:
Зарегистрирован: 2011-07-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

s0rg
Версия питона какая?
Python 2.6.6 (на ОС: Debian Squeeze)



Офлайн

#8 Июль 19, 2011 19:12:55

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

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

Офлайн

#9 Июль 19, 2011 19:35:11

sashog
От:
Зарегистрирован: 2011-07-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен код программы для работы с файлами... помогите(((

Проверять пока не стал) Воспользовался классом ConfigParser ))) хехе) сохранил данные рабочих и их финансы в одном файле. С классом ConfigParser все было просто)) хехе



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version