【问题标题】:How to create a dictionary to count value (username) appearances in two files? - Python如何创建字典来计算两个文件中的值(用户名)出现次数? - Python
【发布时间】:2023-02-26 20:40:53
【问题描述】:

试图完成我的课程任务;

我有两个文件需要读取和比较以获得计数。 一个文件包含以下格式的登录信息: 用户名密码

另一个文件的任务格式如下: 用户名、任务名称、任务描述、记录日期、截止日期、是否完成?(Y/N)

我需要读取这两个文件并计算登录信息文件中的用户在任务文件中有多少任务。

这是我到目前为止所拥有的:

user_file = open("user.txt", "r")
user_tasks = open("tasks.txt", "r")

num_users = user_file.readlines()
total_num_users = len(num_users) # This is for a separate part of the task

task_lines = user_tasks.readlines()
my_dict = {}

# TODO use all_file_count for total number of tasks

for user, task in zip(num_users, task_lines):
    user = user.strip("\n").split(", ")
    task = task.strip("\n").split(", ")
    if user[0] == task[0]:
        my_dict = dict(zip(user, task))
print(my_dict)

最初我只是想测试我是否可以让它工作并显示用户和任务,但我不确定如何将它转换为计数,尽管我可以看到我的第一个障碍是上面没有正常工作,因为我不要让我的所有用户和他们的任务都出现在两个文件中。

这是输出:

/Users/Joekelly/PycharmProjects/HyperionDev/venv/bin/python /Users/Joekelly/PycharmProjects/HyperionDev/main.py {'admin': 'admin', 'adm1n': 'Register Users with taskManager.py'}

以供参考:

我附上了txt的截图。文件 enter image description here 请注意:这不是真实数据,我不会分享人们的登录名/密码 :)

【问题讨论】:

    标签: python dictionary zip


    【解决方案1】:

    第 1 步:改进您的变量名称

    最重要的是,在您的代码中,“num_users”不是用户数量,读者会感到困惑。

    第 2 步。不要尝试将列表一起zip

    这只有在两个文件完全平行时才有效,即一个文件中的#4 行直接对应于另一个文件中的#4 行。我认为这不是你的情况,因为它们是单独的列表,只共享“用户”的价值。

    第 3 步。分三个阶段构建您的词典

    首先,一个空字典,正如您已经完成的那样。

    然后,在用户文件中为每个用户添加一个空列表。

    然后,循环遍历任务文件中的每一行,找出它属于哪个用户,并将其添加到该用户的任务列表中。

    users_file = open("user.txt", "r")
    user_lines = user_file.readlines()
    
    tasks_file = open("tasks.txt", "r")
    task_lines = user_tasks.readlines()
    
    tasks_by_user = {}
    for user_line in user_lines:
        user = user_line.strip("
    ").split(", ")[0]  # I assume the first element of the user line is the user Id?
        tasks_by_user[user] = []
    
    for task_line in task_lines:
        user = task_line.strip("
    ").split(", ")[0]  # I assume the first element of the task line is the task Id?
        task = task.line.strip("
    ").split(", ")[1:] # I assume everything after the user Id on the task line is the task?
        tasks_by_user[user].push(task)
    
    print(tasks_by_user)
    

    【讨论】:

    • 谢谢@Eureka,我会试一试——是的,我真的很难在这个任务中命名变量,因为它太长了,如果我在不同的部分重用一个变量名,我会收到一条错误消息,说 shadows name '' from outer scope,我需要进一步了解如何管理 :)
    猜你喜欢
    • 2018-06-30
    • 2016-07-27
    • 1970-01-01
    • 2019-07-13
    • 2021-12-04
    • 2015-09-06
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多