Python自动关闭

时间:2017-08-30 07:13:49

标签: python

有人能告诉我为什么当我打开这个python文件时会自动关闭?

import itertools   

for combination in itertools.product(xrange(10), repeat=4):
    print ''.join(map(str, combination))
    with open("C:\Users\User\Desktop\test.txt", "a") as myfile:
        myfile.write(join(map(str, combination)))

固定缩进

5 个答案:

答案 0 :(得分:0)

这是因为您使用with样式的打开文件。退出with块时文件将关闭。它是一种打开文件的安全方式。这样,您就不必明确地在close上调用myfile方法。为避免这种情况,您可以使用

myfile = open("C:\\Users\\User\\Desktop\\test.txt", "a")
myfile.write(join(map(str, combination)))

请注意,使用完文件后,请确保使用myfile.close()

您可以浏览this page了解详情

修改

尝试使用此

import itertools
with open(r"C:\Users\User\Desktop\test.txt", "a") as myfile:
    for combination in itertools.product(range(10), repeat=4):
        print (''.join(map(str, combination)))
        myfile.write(''.join(map(str, combination)))

答案 1 :(得分:0)

关于'with'命令:Understanding Python's "with" statement

简短说明:即使您忘记自行关闭,它们会在块执行结束后关闭您的文件。它是一种更好的方式来放置你的代码,而不是try-finally。

在您的情况下,它会为循环的每次迭代打开一次。最后关闭。然后,再次打开它以进行下一次迭代。这是低效的。

只是一个建议,你想避免在for循环中打开文件。 您可以在外面调用它,以便它打开一次,然后运行循环。 with语句将在块执行结束时自动关闭文件。但同样,取决于您的使用环境。

with open(r"C:\Users\User\Desktop\test.txt", "a") as myfile:
    for combination in itertools.product(xrange(10), repeat=4):
        print ''.join(map(str, combination))
        myfile.write(''.join(map(str, combination)))

答案 2 :(得分:0)

import itertools

for combination in itertools.product(xrange(10), repeat=4):
    print ''.join(map(str, combination))
    with open("C:\Users\User\Desktop\test.txt", "a") as myfile:
        myfile.write(join(map(str, combination)))

现在它会起作用。 with将创建一个块,因此您需要缩进。请记住:)

答案 3 :(得分:0)

供参考,请参阅此文Python 'with' keyword

当我们使用with关键字打开文件时,我们无需明确关闭该文件。这也是best practice进行文件处理。

还要修复代码最后一行的缩进

答案 4 :(得分:0)

您还应将最后一行修改为:

myfile.write(''.join(map(str, combination)))

并参考@RetardedJoker的回答

这是我的代码:

import itertools

with open("C:\\Users\\User\\Desktop\\test.txt", "a") as myfile:
    for combination in itertools.product(xrange(10), repeat=4):
        result = ''.join(map(str, combination))
        print result
        myfile.write(result)