Удаление имен пользователей, а не с помощью пароля в текстовом файле - PullRequest
0 голосов
/ 11 февраля 2012
Guest = {}
with open('LogIn.txt') as f:
    credentials = [x.strip().split(':') for x in f.readlines()]
    for username,password in credentials:
        Guest[username] = password
def DelUser():
    DB = open('LogIn.txt',"r+")
    username = DB.read()
    delete = raw_input("Input username to delete: ")
    if delete in username:
        <insert code to remove line containing username:password combination>

Итак, у меня есть файл LogIn.txt со следующими комбинациями имя пользователя: пароль:

chris:test
char:coal
yeah:men
test:test
harhar:lololol

Я хочу удалить комбинацию имя пользователя: пароль, которую я хочу в объекте «удалить» Но проблема в том, если я использую

if delete in username:

аргумент, он также должен учитывать пароль. и пример, что если у меня есть две учетные записи с одним и тем же паролем? Или как тот, что выше. Какой путь я могу выбрать для этого? Или я что-то здесь упускаю?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

В соответствии с текущей функцией DelUser вы можете прочитать файл, удалить строку, начинающуюся с пользователя, которую хотите удалить, и написать новую:

def DelUser():

    # read the current files, and get one line per user/password
    with open('LogIn.txt',"r+") as fd:
        lines = fd.readlines()

    # ask the user which one he want to delete
    delete = raw_input("Input username to delete: ")

    # filter the lines without the line starting by the "user:"
    lines = [x for x in lines if not x.startswith('%s:' % delete)]

    # write the final file
    with open('LogIn.txt', 'w') as fd:
        fd.writelines(lines)
0 голосов
/ 11 февраля 2012

Используйте

if delete in Guest:

, чтобы проверить, является ли delete ключом Guest.Поскольку ключи Guest представляют имена пользователей, if delete in Guest проверяет, является ли delete именем пользователя.


Вы можете использовать модуль fileinput , чтобы переписать файл "на месте":

import fileinput
import sys

def DelUser(Guest):
    delete = raw_input("Input username to delete: ")
    for line in fileinput.input(['LogIn.txt'], inplace = True, backup = '.bak'):
        if delete not in Guest:
            sys.stdout.write(line)
...