那么程序应该检查它是否看到" ok"在电子邮件旁边,如果它确实在另一个txt文件中吐出电子邮件。
输入txt文件:
.......ng0@gmail.com,ok
.......ad@live.com,fail
.......12@live.com,fail
.......5w@live.com,fail
.......np@gmail.com,ok
.......an@live.com,fail
.......40@excite.com,fail
.......g1@gmail.com,ok
python代码是:
readEmails = open("C:\\Users\\Greg\\Desktop\\rewriteEmails.txt","r")
writeEmails = open("C:\\Users\\Greg\\Desktop\\OutputEmails.txt","w")
for line in readEmails:
subbed = line[-3:]
if subbed == "ok":
split = line.split(",")
writeEmails.write(split[0])
print("Email Added")
else:
print("Error")
该程序似乎总是转到if语句的else部分。我有点大脑放屁;我很乐意接受你的建议。
答案 0 :(得分:5)
这一行:subbed = line[-3:]
将为您提供line
的最后3个字符,这些字符永远不会是'ok',即2个字符。
答案 1 :(得分:2)
您可以执行此操作line.strip().endswith('ok')
答案 2 :(得分:1)
简单地说“ok”行的最后三个字符是“,ok”:
>>> line = ".......g1@gmail.com,ok"
>>> line[-3:]
',ok'
修改的 前面的行以新行结束,因此我们将包含换行符而不是逗号:
>>> line = """.......ng0@gmail.com,ok
... """
>>> line[-3:]
'ok\n'
编辑结束
也许你应该只比较最后两个字符:
for line in readEmails:
subbed = line[-2:]
#as you were
对于真正的错误案例,通常会报告错误,然后您可以轻松地告诉错误。而不只是说
else:
print("Error")
您也可以打印出subbed
变量,并且可能已经明显存在问题。
答案 3 :(得分:1)
你的问题就在这一行
subbed = line[-3:]
返回以下内容:
ok\n
或
il\n
因此,if
语句检查subbed == 'ok'
每次都会失败。
您可以通过剥离换行符后仅取最后两个字符来解决此问题:
subbed = line.strip()[-2:]
我的原始答案没有考虑从文件中读取。该答案假设结果为,ok
或ail
。从文件读取时,这不是正确的响应。上面的答案已被修改,以显示将返回的内容并适当调整解决方案。
答案 4 :(得分:1)
您可以使用正则表达式解决问题。以下是您的代码示例。
import re
for line in readEmails:
subbed = re.match("(?:.*),(\\w+)", line)
print(subbed.group(1))
if subbed.group(1) == "ok":
writeEmails.write(subbed.group(1))
print("Email Added")
else:
print("Error")