Как я могу активно удалять дубликаты из ввода в текстовый файл на сервере Flask?

#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")