#python #flask #text #duplicates
Вопрос:
В настоящее время я пытаюсь предотвратить добавление дубликатов имен в этот текстовый файл, поскольку данные вводятся с сообщений на сервер. Моя проблема в том, что я знаю только, как удалить дубликаты из файлов, которые уже были закрыты, а не из файлов, которые активно добавляются. Вот приведенный ниже блок кода, на который я ссылаюсь:
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/', methods =['POST'])
def post():
if request.method == 'POST':
print(request.data)
datastr = str(request.data)
dataclean = datastr[1:].replace('\r', '').strip("'").replace('\n','n')
with open("PLAYERGATHERDATA.txt", "a") as SERVERDATA:
SERVERDATA.write(dataclean)
return 'FINISHED'
if __name__ == '__main__':
app.run(host= '0.0.0.0', port="8000")
Поэтому я бы обычно удалял дубликаты таким образом:
DATADIR = "C:UsersDocumentsPLAYERGATHERDATA.txt"
fRAW = open(DATADIR, "rt")
fCLEAN = open("CLEAN.txt", "wt")
line_seen = set() #Duplicate set check
for line in fRAW:
if line not in line_seen:
fCLEAN.write(line.replace(' ', '_'))
line_seen.add(line)
Я бы предположил , что после очистки данных с dataclean = datastr[1:].replace('\r', '').strip("'").replace('\n','n')
помощью этого я затем удалю дубликаты из входящего сообщения. (Это 12 имен символов с новыми строками в конце), должен ли я закрыть текстовый файл, чтобы удалить дубликаты, а затем снова открыть текстовый файл? Есть ли лучший способ сделать это, который сделал бы программу немного чище?
Спасибо!
Ответ №1:
Я догадался — вот и весь квартал:
from flask import Flask
from flask import request
app = Flask(__name__)
line_seen = set()
@app.route('/', methods =['POST'])
def post():
if request.method == 'POST':
print(request.data)
datastr = str(request.data)
dataclean = datastr[1:].replace('\r', '').strip("'").replace('\n','n')
with open("TempINPUT.txt", "wt") as SERVERDATARAW:
SERVERDATARAW.write(dataclean)
SERVERDATARAW.close()
SERVERDATARAW = open("TempINPUT.txt", "rt")
with open("PLAYERGATHERDATA.txt", "a") as SERVERDATA:
for line in SERVERDATARAW:
if line not in line_seen:
SERVERDATA.write(line)
line_seen.add(line)
return 'FINISHED'
if __name__ == '__main__':
app.run(host= '0.0.0.0', port="8000")