我正在尝试创建一个脚本,该脚本将文件作为输入,查找所有电子邮件地址,并将它们写入指定的文件。
基于其他类似的问题,我最终得到了这个:
import re
Input = open("inputdata.txt", "r")
regex = re.compile("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")
Logfile = "Result.txt"
for line in Input:
query = regex.findall(line)
for line in query:
print >>Logfile, query
我在做错了什么?这没什么输出。
我猜测主要的问题是"对于查询中的行:",我试图改变而没有任何运气。
干杯!
编辑:我已按照以下建议更改了脚本,使用" print(query)"代替。 我仍然没有得到任何输出。 当前脚本是:
import re
Input = open("Inputdata.txt", "r")
regex = re.compile("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")
# logfile = "Result.txt"
for line in Input:
query = regex.findall(line)
for line in query:
with open("Result.txt", "a") as logfile:
logfile.write(line)
它什么也没输出,告诉我:" NameError:name" logfile"未定义"。 导致这种情况的原因是什么,这是没有输出的原因?
答案 0 :(得分:1)
您的Logfile
变量只是文件的名称,而不是实际的file
对象。此外,您应该使用with
在完成后自动关闭文件。试试这个:
with open("Result.txt", "a") as logfile:
print >>logfile, "hello world"
print >>logfile, "another line"
但请注意,在Python 3.x中,语法不同,因为print
不再是语句而是a function:
with open("Result.txt", "a") as logfile:
print("hello world", file=logfile)
print("another line", file=logfile)
因此,不是重定向print
,最好的选择可能是直接write
到文件:
with open("Result.txt", "a") as logfile:
logfile.write("hello world\n")
logfile.write("another line\n")
答案 1 :(得分:0)
我不认为,使用print
,您可以在不将输出重定向到文件的情况下写入文件。您使用print
的方式,我想,您只想要输出重定向。
假设您的python脚本位于文件test.py
中。
替换行:
print >>Logfile, query
只是:
print query
从终端/ cmd,运行如下脚本:
python test.py >> Result.txt
这称为输出重定向。