为什么这个基本的 python 程序不起作用?
Why is this basic python program not working?
好吧,程序应该检查它是否在电子邮件旁边看到 "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 部分。我有点脑子放屁了;我会喜欢你的建议。
这一行:subbed = line[-3:]
将为您提供 line
的最后 3 个字符,它永远不会是 'ok',即 2 个字符。
只是 "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
变量,问题所在可能已经很明显了。
你的问题是这一行
subbed = line[-3:]
这个returns以下:
ok\n
或
il\n
因此,您的 if
语句检查是否 subbed == 'ok'
每次都会失败。
您可以通过在去除换行符后只取最后两个字符来解决此问题:
subbed = line.strip()[-2:]
我原来的回答没有考虑从文件中读取。该答案假定结果为 ,ok
或 ail
。这不是从文件读取时的正确响应。上面的答案已被修改以显示将返回的内容并适当调整解决方案。
而不是依赖于字符串长度(你有 3 而不是 2),你可以这样做 line.strip().endswith('ok')
您可以使用正则表达式解决您的问题。这是您的代码示例。
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")
好吧,程序应该检查它是否在电子邮件旁边看到 "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 部分。我有点脑子放屁了;我会喜欢你的建议。
这一行:subbed = line[-3:]
将为您提供 line
的最后 3 个字符,它永远不会是 'ok',即 2 个字符。
只是 "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
变量,问题所在可能已经很明显了。
你的问题是这一行
subbed = line[-3:]
这个returns以下:
ok\n
或
il\n
因此,您的 if
语句检查是否 subbed == 'ok'
每次都会失败。
您可以通过在去除换行符后只取最后两个字符来解决此问题:
subbed = line.strip()[-2:]
我原来的回答没有考虑从文件中读取。该答案假定结果为 ,ok
或 ail
。这不是从文件读取时的正确响应。上面的答案已被修改以显示将返回的内容并适当调整解决方案。
而不是依赖于字符串长度(你有 3 而不是 2),你可以这样做 line.strip().endswith('ok')
您可以使用正则表达式解决您的问题。这是您的代码示例。
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")