Python通过循环将打印输出重定向到文件

Python通过循环将打印输出重定向到文件,python,Python,简单的问题,但这让我很恼火。我试图循环一系列不同因素的产品,然后将每个产品打印到一个文件中。我可以使用with语句使代码正常工作,但是没有with语句就无法使代码正常工作,我不明白为什么。我正在打开文件,然后像往常一样关闭它。代码如下: f = open('out.txt', 'w') for num1 in range(100,999): for num2 in range(100,999): product=num1*num2 length=len(s

简单的问题,但这让我很恼火。我试图循环一系列不同因素的产品,然后将每个产品打印到一个文件中。我可以使用with语句使代码正常工作,但是没有with语句就无法使代码正常工作,我不明白为什么。我正在打开文件,然后像往常一样关闭它。代码如下:

f = open('out.txt', 'w')
for num1 in range(100,999):
    for num2 in range(100,999):
        product=num1*num2
        length=len(str(product))
        if length % 2 == 0:
            #halfway_point=
            print >> f, product
f.close()
它在最后一行失败,原因是:

SyntaxError: invalid syntax

由于打印>>f,产品,您的语法错误即将出现

此外,您并没有写入文件,而是打印到控制台

您需要f.writestrproduct+'\n'行而不是print>>f,product我不知道print>>f,product是什么意思

这在python3中对我来说很好

f = open('out.txt', 'w')
for num1 in range(100,999):
    for num2 in range(100,999):
        product=num1*num2
        length=len(str(product))
        if length % 2 == 0:
            #halfway_point=
            f.write(str(product) + '\n')
f.close()
我不知道打印产品是什么意思。但你可以这样做:

f = open('out.txt', 'w')
for num1 in range(100,999):
    for num2 in range(100,999):
        product=num1*num2
        length=len(str(product))
        if length % 2 == 0:
              #halfway_point=
              # print >> f, product
              print(str(product) ) # print in the console
              f.write(str(product) + "\n")
f.close()

不确定您使用的是Python2还是Python3。无论哪种方式,您看到语法错误的事实表明正在使用交互式解释器会话

我假设您使用的是Python 2。print>>表达式,表达式在Python 2中是有效的,并且在代码中使用它是正确的。它只是意味着将print语句中第二个表达式的字符串值重定向到第一个表达式中给定的类似文件的对象。此语句在Python 3中不可用

可能您正在将代码粘贴到一个交互式Python会话中,如果是这样,您需要在执行close之前添加一个额外的新行来关闭上一个for循环,否则您将得到一个SyntaxError

如果您将该代码添加到Python 2脚本文件并运行该脚本文件,它将起作用:

$ python2 somefile.py
或者,如果使用交互式解释器,只需确保输入额外的新行即可

对于Python 3,您可以这样做:

print('{}'.format(product), file=f)
您还可以通过从_future____模块导入相同的print函数,在Python 2中使用该函数:


在这两种情况下,您都应该使用您在问题中提到的with语句。

您真的有打印>>f,产品吗?嗨,mhawke-谢谢。你完美地描述了这个问题。版本是2.7.10,但我在一个解释器中运行,这导致它在循环后失败-为什么解释器需要额外的行来关闭它?@dodgerstjw:请查看解释。
from __future__ import print_function