Как напечатать указанный пользователем текст c из текстового файла - PullRequest
0 голосов
/ 26 января 2020

Может ли кто-нибудь помочь мне заставить мою программу напечатать информацию о пользователе c, основанную на том, какой пользователь вошел в программу из информации в текстовом файле. В моей программе есть меню, которое отображает только текущие задачи пользователей, набрав «vm». Предполагается, что будут показаны только задачи, назначенные пользователю. Мне удалось показать пользователю все задачи для всех пользователей, но как мне извлечь только данные пользователя c из txt-файла.

Файл txt выглядит следующим образом:

Пользователь назначен на задачу:

admin

Название задачи:

Справка

Описание задачи:

Помощь бабушке

Дата выполнения задачи:

2020-01-24

Назначенная дата:

2020-01-24

Выполнение задачи:

Нет

...........................

Пользователь назначен к задаче:

johndoe

Название задачи:

Прогулка

Описание задачи:

Прогулка с собакой

Дата выполнения задачи:

2020-01-26

Дата назначения:

2020-01-24

Задание выполнено:

Нет

Как бы я закончил sh свою последнюю строку кода, если бы я просто хотел напечатать задание для johndoe

Код, который у меня есть, следующий:

import datetime
users = {}
with open ('user.txt', 'rt')as username:
    for line in username:
        username, password = line.split(",")
        users[username.strip()] = password.strip()  # strip removes leading/trailing whitespaces

uinput = input("Please enter your username:\n")
while uinput not in users:
    print("Username incorrect.")
    uinput = input("Please enter a valid username:\n")

if uinput in users:
            print ("Username correct")

with open('user.txt', 'rt') as password:
    for line in password:
        username, password = line.split(",")
        users[password.strip()] = username.strip()  # strip removes leading/trailing whitespaces

uinput2 = input("Please enter your password:\n")
while uinput2 not in users:
    print("Your username is correct but your password is incorrect.")
    uinput2 = input("Please enter a valid password:\n")

if uinput2 in users:
    password2 = ("Password correct")
    print (password2)

if password2 == ("Password correct"):
        menu = (input("\nPlease select one of the following options:\nr - register user\na - add task\nva - view all tasks\nvm - view my tasks\ne - exit\n"))
        if menu == "r" or menu == "R":
                    new_user = (input("Please enter a new user name:\n"))
                    new_password = (input("Please enter a new password:\n"))
                    with open ('user.txt', 'a')as username:
                            username.write("\n" + new_user + ", " + new_password)
        elif menu == "a" or menu == "A":
            task = input("Please enter the username of the person the task is assigned to.\n")
            while task not in username:
                task = input("Username not registered. Please enter a valid username.\n")

            else:
                task_title = input("Please enter the title of the task.\n")
                task_description = input("Please enter the task description.\n")
                task_due = input("Please input the due date of the task. (yyyy-mm-dd)\n")
                date = datetime.date.today()
                task_completed = False
                if task_completed == False:
                    task_completed = "No"
                else:
                    task_completed = ("Yes")
                with open('tasks.txt', 'a') as task:
                    task.write("\nUser assigned to task:\n" + uinput + "\nTask Title :"  + "\n" + task_title + "\n" + "Task Description:\n" + task_description + "\n" + "Task Due Date:\n" + task_due + "\n" + "Date Assigned:\n" + str(date) + "\n" + "Task Completed:\n" + task_completed + "\n") 

        elif menu == "va" or menu == "VA":
            all_tasks = open('tasks.txt', 'r')
            text = all_tasks.read()
            all_tasks.close()
            print(text)
        elif menu == "vm" or menu == "VM"

Любая помощь Вы действительно должны быть оценены. Спасибо

1 Ответ

0 голосов
/ 26 января 2020

Этот фрагмент кода использует регулярные выражения и извлекает нужные поля из текста, который вы вставили выше. Я скопировал точное содержание, которое вы разместили в текстовый файл. Я назвал файл как sample_text.txt

Вариант 1: Это позволит извлечь все имена пользователей, задачи и описание задачи, которым они назначены.

import re
with open('sample_text.txt','r') as fl:
    lst = re.findall('.*\n*(User assigned to task:).*\n*(.*)\n*(Task Title :)\n*(.*)\n*(Task Description:)\n*(.*)\n*', fl.read())
for item in lst:
    print(f'"{item[1]}" is assigned with "{item[5]}"')


Output:
> "admin" is assigned to "Help Granny"
  "johndoe" is assigned to "Walk the dog"

Вариант 2: Это запросит имя пользователя, которое вас интересует, а затем будет извлекать только эти данные пользователя.

import re
name = input('Enter the name of the user:')
with open('sample_text.txt','r') as fl:
    lst = re.findall('.*\n*User assigned to task:.*\n*(' + re.escape(name) + ')\n*Task Title :\n*(.*)\n*Task Description:\n*(.*)\n*', fl.read())

for item in lst:
    print(f'"{item[0]}" is assigned with task "{item[1]}" and task description "{item[2]}"')

Output:
> Enter the name of the user:johndoe
> "johndoe" is assigned with task "Walk" and task description "Walk the dog"
...