Почему он дважды записывает tags_line в файл?Python

Программы на Python
Anonymous
Почему он дважды записывает tags_line в файл?

Сообщение Anonymous »

Говорит, друг,
Я создаю очень упрощенный декодер, но я новичок в Python и понятия не имею, почему он записывает значения "tag_line", который представляет собой список, дважды в файл "filen_e".
Список "tags_line" должен использоваться для улавливания слов, неизвестных декодеру, и сохранения их в отдельном файле.
Вот вся функция кодировщика:
# the encoder function ;; filen_e is the file that stores words that aren't in the dictionary
def encoder(lst, filen=dictionary, filen_e=filen_e, verbose=False): # wordlist / dictionary ######## >>>> NEEDS FIXING !!!!!!
encoded = []
counter = 1
counter2 = 0
tags = []
tags_nrs = []
tags_line = []

score = False
check = False
with open(filen, "r", encoding="utf-8") as f:
comprehension = f.read().splitlines()
if verbose == True:
print(f"Type comprehension: {type(comprehension)}{comprehension}\n")
for i in range(len(lst)):
for j in range(len(comprehension)):
if lst == comprehension[j]:
# match
encoded.append(counter)
counter = 1
score = True
break
if counter >= len(comprehension):
counter = 1
print(f"- appending: 0")
encoded.append(0) # in case there is no match
print(f"- appending: {i},{lst}")
tags_line.append([i, lst]) # for storing in file "filen_e"
break
counter += 1
counter2 += 1
f.close()
if counter2 > 1:
s = "s."
else:
s = "."
if verbose == True:
# output for the function
print(f"+(Encoder)")
print(f"Processed: ({counter2}) token{s}")
print(f"String: {lst}")
print(f"Encoded string: {encoded}\n")
logmsg = f"encoder({counter2}) :: 'Processed: ({counter2}) token{s}'"
log(logmsg)
if check==True:
logmsg = f"encoder({counter2}) :: 'Can not process: ({tags}) token{s}'"
log(logmsg)
with open(filen_e, "a", encoding="utf-8") as f:
# tags_line = f"tags: {tags_nrs}:{tags},"
print(f"- unknown tags: {tags_line}")
f.write(str(tags_line))
tags_line = []
f.close()
return encoded

То, что он записывает, возвращается в выходные данные программы как:
+(beta_encoder):
- appending: 0
- appending: 2,homia
- appending: 0
- appending: 4,ducken
- appending: 0
- appending: 6,pls
- unknown tags: [[2, 'homia'], [4, 'ducken'], [6, 'pls']]
+(encode).reverse encoding

[6195, 5879, 0, 6085, 0, 3700, 0]

Последняя строка — это закодированная строка с числом 0, в три раза превышающим число 0, что означает, что оно поймало незнакомое слово, как оно показано в неизвестных тегах: [[2, 'homia'] и т.д.
Тогда содержимое файла "filen_e", куда должны быть записаны эти неизвестные теги, имеет следующее:
[[2, 'homia'], [4, 'ducken'], [6, 'pls']][[2, 'homia'], [4, 'ducken'], [6, 'pls']]

ChatGPT сказал мне, что я должен очистить значение tags_line в начале функции, но это уже так, поскольку я инициализирую его как пустой список в начале функции .
Это действительно сбивает с толку.
Примечание: файл записывается в режиме «a»

Подробнее здесь: https://stackoverflow.com/questions/768 ... file-twice

Вернуться в «Python»