【发布时间】:2015-02-18 15:59:52
【问题描述】:
我正在尝试编写一个要求输入电子邮件和密码(不是出于任何特定目的)的代码,并将它们与包含多行的 csv 文件进行检查。每行都包含一个电子邮件和密码以及一些虚构的客户详细信息。我正在尝试编写一个接受电子邮件地址和密码(5 - 12 个字符长)的代码,然后在文件中搜索包含电子邮件和密码的行并打印整行(包括客户详细信息)。到目前为止,这是我的代码(有些缩进在这里可能看起来有点奇怪,但实际上只是代码块缩进的结果):
import csv
import re
import sys
f = open('A453_datafile_4_Mat 4 Data File.csv', 'r').read()
print("Welcome to our website! To access your customer details, we first require you to sign in. ")
print("")
email = input ("Email address: ")
if re.match("\A(?P<name>[\w\-_]+)@(?P<domain>[\w\-_]+).(?P<toplevel>[\w]+)\Z",email,re.IGNORECASE):
print('')
else:
email = input("Sorry, this isn't a valid email address! Try again: ")
if re.match("\A(?P<name>[\w\-_]+)@(?P<domain>[\w\-_]+).(?P<toplevel>[\w]+)\Z",email,re.IGNORECASE):
print('')
else:
print("You have entered your email incorrectly two times. The program will now terminate." )
sys.exit() #ends program
password = input ("Password: ")
if re.match("\A(?P<name>[\w\-_]+)\Z",password,re.IGNORECASE):
print('')
else:
password = input("Sorry, this isn't a valid password! Try again: ")
if re.match("\A(?P<name>[\w\-_]+)\Z",password,re.IGNORECASE):
print('')
else:
print("You have entered your password incorrectly two times. The program will now terminate." )
sys.exit() #ends program
details = [line for line in f.split('\n') if email in line] and [line for line in f.split('\n') if password in line]
if details == []:
print("Sorry, your email or password is invalid.")
else:
print("Thank you! Here are your customer details: ")
print("")
details = str(details).strip('[]')
print(details)
我在使用这条线时遇到了问题,因为“和”似乎无法按我的意愿工作:
details = [line for line in f.split('\n') if email in line] and [line for line in f.split('\n')
如果我故意输入错误的密码(例如字母“x”),并且它恰好存在于另一行,它会打印该行,尽管它不包含电子邮件地址。
这是一个例子:
欢迎访问我们的网站!要访问您的客户详细信息,我们首先要求您登录。
电子邮件地址:ojones@coldmail.net
密码:x
谢谢!以下是您的客户详细信息:
'miguel5@bluebell.net,happy3,Miguel,Santos,45 Vine Avenue,Oxford,OX7 3RF'
虽然它使用正确的密码:
欢迎访问我们的网站!要访问您的客户详细信息,我们首先要求您登录。
电子邮件地址:ojones@coldmail.net
密码:ocrabc
谢谢!以下是您的客户详细信息:
'ojones@coldmail.net,ocrabc,Oliver,Jones,53 Vale House,朴茨茅斯,P03 2TD'
还有这个正则表达式,因为我不知道如何将密码长度限制为 5 - 12 个字符(我是正则表达式的新手,还没有学会如何使用它):
if re.match("\A(?P<name>[\w\-_]+)\Z",password,re.IGNORECASE)
我怀疑修复此问题可能主要解决前一个问题(除非有人知道文件的内容),但如果可能的话,我们将不胜感激。
可能还有其他一些我没有意识到的问题,但据我所知,仅此而已。
我知道这个问题很长,所以感谢您抽出宝贵时间阅读它,任何答案将不胜感激!
【问题讨论】:
-
呃——不要以纯文本形式存储密码...
-
别介意我问,为什么没有数据库?
-
@Jesse W at Z - 它们不是真正的密码,所有信息都是为了这个程序的目的而编造的。
-
@StefanNch - 数据库?我需要一个吗?
-
你必须为索尼工作。
标签: python regex email csv line