如何创建一个可以在txt文件中查找多个值并返回结果的python模块

问题描述 投票:0回答:1

我有一个 passwd.txt 文件,其格式如下,我想创建一个模块。该模块应将每一行用“:”分隔并保存 3 个值:用户名、真实名和密码变量。因为我将在 3 个独立的较小程序中使用此功能。一个将在登录中使用,因为它需要用户名和密码,并且将授予或不授予访问权限,删除需要用户名的用户程序,然后从文件中删除该用户名,并且一个要求用户名和旧密码的更改密码程序将其与值从模块返回,然后用新密码替换旧密码。这些都是从终端运行的,并且都用于比较用户名或密码

用户名:真实姓名:密码

等等

这是我的代码,它一直有效,直到我尝试将其放入模块中,现在只有在比较最后一行时才有效,这是第一次尝试为多个小程序重用代码块。发现这很棘手,因为登录、changepasswd、deluser 和 adduser 是单独的 python 文件

def splitWordFile():
    with open("passwd.txt") as file:
        for line in file:
            separatingData = line.split(":")
            userName = separatingData[0]
            if len(userName) > 1:
                realName = separatingData[1]
                actualPassword = separatingData[2].strip()
            else:
                continue

    return userName, realName, actualPassword
python file text module
1个回答
0
投票

如果将函数转换为生成器,您会发现它更易于使用。正如所写,您的函数将仅返回最后观察到的 userNamerealNameactualPassword

我们假设 passwd.txt 如下所示:

aaa:bbb:ccc
xxx:yyy:xxx

...然后...

FILENAME = "passwd.txt"

def splitWordFile(filename):
    with open(filename, "r") as data:
        for line in map(str.strip, data):
            yield line.split(":")

for userName, realName, actualPassword in splitWordFile(FILENAME):
    print(f"{userName=}, {realName=}, {actualPassword=}")

输出:

userName='aaa', realName='bbb', actualPassword='ccc'
userName='xxx', realName='yyy', actualPassword='xxx'
© www.soinside.com 2019 - 2024. All rights reserved.