Как в 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 шт):

Автор решения: Nickolay Chistov

Код довольно сложный:

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; 
→ Ссылка
Автор решения: Aleksandr Batka

Если переменная не глобальная а локальная для этой функции то всё Объясняется просто она и не инкрементится. Наверное надо переменную сделать глобальной. Мало входных данных но это первое что пришло на ум глядя на входные данные.

→ Ссылка