如何让isalnum()忽略换行符 ?Python密码校验问题求助
密码校验中换行符导致
isalnum()判断错误的解决办法 你的核心问题是读取文件时每行末尾的换行符\n未被处理,导致isalnum()把带\n的字符串判定为非纯字母数字。另外代码还有两处逻辑问题:一是未使用读取到的文件内容做校验,反而复用了写入前的passwords变量;二是close()调用时缺少括号,导致文件未正确关闭。
修正后的代码
# 写入密码文件(用with语句自动管理文件生命周期) with open("passwords.txt", "w") as s: passwords = """5345m345a34l no2no123non4 noq234n5ioqw#% %#SGMSGSER doghdp5234 sg,dermoepm 43453-frgsd hsth())) bmepm35wae vmopaem2234+0+ gsdm12313""" s.write(passwords) # 读取文件并校验密码 with open("passwords.txt", "r") as s: for line in s.readlines(): # 精准去掉每行末尾的换行符,若需清除首尾空格可换成strip() password = line.rstrip('\n') # 跳过空行(避免无意义校验) if not password: continue if password.isalnum(): print(f"{password} correct password") else: print(f"{password} contains incorrect markings")
关键修正说明
- 用
with语句管理文件:自动处理文件的打开与关闭,无需手动调用close(),避免语法错误和资源泄漏 - 处理换行符:通过
rstrip('\n')移除每行末尾的换行符,确保传给isalnum()的是纯密码内容 - 校验文件实际内容:直接遍历读取到的文件行,保证校验的是文件中的真实数据
- 跳过空行:避免对文件中可能存在的空行进行无意义判断
内容的提问来源于stack exchange,提问作者Bobby
相关产品推荐
相关产品推荐

