使用Python将输出打印到文件

时间:2015-03-25 09:15:27

标签: python-3.x

我正在尝试创建一个脚本,该脚本将文件作为输入,查找所有电子邮件地址,并将它们写入指定的文件。

基于其他类似的问题,我最终得到了这个:

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"未定义"。 导致这种情况的原因是什么,这是没有输出的原因?

2 个答案:

答案 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

这称为输出重定向。