Python 在条件之间关闭和打开文件

Python 在条件之间关闭和打开文件,python,file,Python,File,我有一个for循环,其中有一个条件。 如果条件成立,我想创建一个具有特定名称的文件并写入它。如果条件不成立,我只想写入在以前的迭代中创建的文件 文件名取决于x[0] 我没有运行它,因为很明显它不会运行。您将如何处理有条件关闭和打开文件(始终使用新名称) 或者,您可以在每次循环迭代中打开和关闭文件,在这种情况下,您可以执行以下操作: fileName = something_that_creates_the_first_file_name() for x in dd: if x[1]:

我有一个for循环,其中有一个条件。 如果条件成立,我想创建一个具有特定名称的文件并写入它。如果条件不成立,我只想写入在以前的迭代中创建的文件

文件名取决于x[0]

我没有运行它,因为很明显它不会运行。您将如何处理有条件关闭和打开文件(始终使用新名称)

或者,您可以在每次循环迭代中打开和关闭文件,在这种情况下,您可以执行以下操作:

fileName = something_that_creates_the_first_file_name()

for x in dd:
    if x[1]:  # Close old file and start to write to new file
        fileName = "_".join(matchList) # create sensible file name

    with open(fileName, "a") as my_file:
        my_file.write(x[0])
后一种方法使用文件的内置上下文管理处理程序,以确保如果有任何错误,就不会有文件处于打开状态

或者,您可以在每次循环迭代中打开和关闭文件,在这种情况下,您可以执行以下操作:

fileName = something_that_creates_the_first_file_name()

for x in dd:
    if x[1]:  # Close old file and start to write to new file
        fileName = "_".join(matchList) # create sensible file name

    with open(fileName, "a") as my_file:
        my_file.write(x[0])

后一种方法使用文件的内置上下文管理处理程序,以确保如果有任何错误,就不会有文件处于打开状态。

这是@tomdalton的答案,只需稍加更新即可添加try/finally块。他的答案应该是可以接受的,我只是添加了一个错误管理调整
with
子句很好,但仅在应该在子句中管理资源时才起作用。否则,您需要返回到基本的
finally

my_file = something_that_creates_the_first_file()
try:
    for x in dd:
        if x[1]:  # Close old file and start to write to new file
            my_file.close()
            fileName = "_".join(matchList) # create sensible file name
            my_file = open(fileName, "w")

        my_file.write(x[0])
finally:
    my_file.close()

这是@tomdalton的答案,稍加更新,添加了try/finally块。他的答案应该是可以接受的,我只是添加了一个错误管理调整
with
子句很好,但仅在应该在子句中管理资源时才起作用。否则,您需要返回到基本的
finally

my_file = something_that_creates_the_first_file()
try:
    for x in dd:
        if x[1]:  # Close old file and start to write to new file
            my_file.close()
            fileName = "_".join(matchList) # create sensible file name
            my_file = open(fileName, "w")

        my_file.write(x[0])
finally:
    my_file.close()

你能详细解释一下为什么它“不会运行”吗?您的方法在我看来还可以。@AndrewGelnar我可能需要在之前为cycle创建一个文件,而不将其与文件名和操作相关联。您能详细说明为什么它“不会运行”吗?我觉得你的方法还可以。@AndrewGelnar我可能需要在for cycle之前创建一个文件,而不将其与文件名和操作关联。我最喜欢的方法是将
for
循环放在关闭文件的
try/finally
块中。第一个文件名将从dd[0][1]创建,因此,我可能会在dd[1:]上运行for循环。从代码可读性来看,它看起来很丑陋,但似乎是唯一的解决方案。因此,我将使用注释使其可读。@tdelaney,当您打开下一个文件对象时,当文件对象本身发生更改时,我想不出该怎么做。如果您能使代码正常工作,那么很高兴看到它。@TomDalton我添加了一个答案来说明我的意思。但是我会保留我的“like”。谢谢,我创建了一个问题。我最喜欢的是将
for
循环放在一个
try/finally
块中,该块关闭文件。第一个文件名将从dd[0][1]创建,这样我可能会在dd[1:]上运行for循环。从代码可读性来看,它看起来很丑陋,但似乎是唯一的解决方案。因此,我将使用注释使其可读。@tdelaney,当您打开下一个文件对象时,当文件对象本身发生更改时,我想不出该怎么做。如果您能使代码正常工作,那么很高兴看到它。@TomDalton我添加了一个答案来说明我的意思。但是我会把我的“喜欢”保留在你的上面。谢谢,我创造了这个问题。谢谢,我创造了这个问题。@xralf-这个答案回答了那个问题。大多数情况下,这只是打开新文件并将其放入
my_file
变量中以备将来写入的情况。
finally
用于捕获引发异常的情况,它将关闭最后一个文件。谢谢,我创建了一个问题的答案。@xralf-这个答案回答了这个问题。大多数情况下,这只是打开新文件并将其放入
my_file
变量中以备将来写入的情况。
finally
用于捕获引发异常的情况,它将关闭最终文件。