Как в Python повесить на значение переменной счётчик открытий другого файла?
Коллеги всех с праздниками. Не бейте сильно =) Второй день сижу пишу на Python (до этого вообще не программировал). Подскажите пожалуйста как решить следующую проблему:
в файле 'orm.py' есть переменная
TRANS_ID = 1
а этом же файле ('orm.py') есть так же функция открытия файла для записи / дозаписи
f = open('trak.txt', 'a+', encoding='UTF-8')
Пытаюсь повесить счётчик на переменную 'TRANS_ID = 1', который считал бы количество открытий файла 'trak.txt'. Перепробовал всякие способы с 'counter', но чего-то совсем не выходит каменный цветок. Логика такая: при открытии 'trak.txt' переменная 'TRANS_ID = 1' должна увеличиваться на единицу, то есть перезаписываться.
Помогите пожалуйста советом. Спасибо.
TRANS_ID = 1
ACTION = 'NEW_ENTRY'
ACCOUNT = 45678
CLIENT_CODE = '45678'
PRICE = 0
SPEAD = 65
# формирование строки для записи в файл trak.txt
pt01 = f'ACTION={ACTION}; '
pt02 = f'ACCOUNT={ACCOUNT}; '
pt03 = f'PRICE={PRICE}; '
pt04 = f'SPEAD={SPEAD}; '
pt05 = f'TRANS_ID={TRANS_ID}; '
pt06 = f'CLIENT_CODE={CLIENT_CODE}; '
# запись строки в файл trak.txt
f = open('trak.txt', 'a+', encoding='UTF-8')
TRANS_ID += 1
#------------------------------------------------------------------------------------------------------
# после открытия файла trak.txt для записи строки, должен срабатывать счётчик и
# перезаписывать значение в переменную TRANS_ID, которая запишется в переменную pt05 и запишется
# строку, которая в свою очередь запишется в файл trak.txt.
# ------------------------------------------------------------------------------------------------------
# переменная TRANS_ID = 1 должна заполняться счётчиком операций от 1 до 2 200 000 000
#------------------------------------------------------------------------------------------------------
f.write(pt01+pt02+pt03+pt04+pt05+'\n')
f.close()
листинг записи файла trak.txt в нем запись TRANS_ID не меняет значение, а должна так как это и есть счётчик.
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
Ответы (2 шт):
Код довольно сложный:
TRANS_ID = 0
ACTION = 'NEW_ENTRY'
ACCOUNT = 45678
CLIENT_CODE = '45678'
PRICE = 0
SPEAD = 65
# запись строки в файл trak.txt
with open('trak.txt', 'r', encoding='UTF-8') as f1:
s = f1.read()
if s:
TRANS_ID = int(s[s.rfind('=')+1:s.rfind(';')])
f2 = open('trak.txt', 'a+', encoding='UTF-8')
TRANS_ID += 1
pt01 = f'ACTION={ACTION}; '
pt02 = f'ACCOUNT={ACCOUNT}; '
pt03 = f'PRICE={PRICE}; '
pt04 = f'SPEAD={SPEAD}; '
pt05 = f'TRANS_ID={TRANS_ID}; '
pt06 = f'CLIENT_CODE={CLIENT_CODE}; '
#------------------------------------------------------------------------------------------------------
# после открытия файла trak.txt для записи строки, должен срабатывать счётчик и
# перезаписывать значение в переменную TRANS_ID, которая запишется в переменную pt05 и запишется
# строку, которая в свою очередь запишется в файл trak.txt.
# ------------------------------------------------------------------------------------------------------
# переменная TRANS_ID = 1 должна заполняться счётчиком операций от 1 до 2 200 000 000
#------------------------------------------------------------------------------------------------------
f2.write(pt01+pt02+pt03+pt04+pt05+'\n')
f2.close()
После 11 запусков кода в trak.txt:
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=1;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=2;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=3;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=4;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=5;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=6;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=7;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=8;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=9;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=10;
ACTION=NEW_ENTRY; ACCOUNT=45678; PRICE=0; SPEAD=65; TRANS_ID=11;
Если переменная не глобальная а локальная для этой функции то всё Объясняется просто она и не инкрементится. Наверное надо переменную сделать глобальной. Мало входных данных но это первое что пришло на ум глядя на входные данные.