Python多次使用open(file)变量?

时间:2013-08-20 19:53:15

标签: python file-io python-3.x

是否可以将变量定义为open("file.txt", "a")并多次调用它,这样您就不必继续输入open("file.txt", "a")

我试过了,但它似乎对我不起作用。我一直收到错误消息:

  

ValueError:关闭文件的I / O操作。

我的代码如下:

x = open("test.txt", "a")
with x as xfile:
    xfile.write("hi")

#works fine until I try again later in the script

with x as yfile:
    yfile.write("hello")

问题:有没有办法做到这一点,我错过了?

(道歉,如果这个问题重复,我做了搜索谷歌和SO,然后我发布了一个新问题。)

4 个答案:

答案 0 :(得分:3)

如果您不想立即关闭文件,请不要使用with语句并在完成后自行关闭。

outfile = open('test.txt', 'w')

outfile.write('hi\n')

x = 1
y = 2
z = x + y

outfile.write('hello\n')

outfile.close()

通常,当您要打开文件并立即对该文件执行某些操作然后将其关闭时,请使用with语句。

with open('test.txt', 'w') as xfile:
    do something with xfile

但是,如果可以,最好一次使用单个文件来处理所有I / O.因此,如果要将多个内容写入文件,请将这些内容放入列表中,然后编写列表内容。

output = []

x = 1
y = 2
z = x + y
output.append(z)

a = 3
b = 4
c = a + b
output.append(c)

with open('output.txt', 'w') as outfile:
    for item in output:
        outfile.write(str(item) + '\n')

答案 1 :(得分:2)

with语句自动关闭文件。最好在with语句中执行与文件相关的所有操作(多次打开文件也不是一个好主意)。

with open("test.txt", "a") as xfile:
    # do everything related to xfile here

但是,如果它无法解决您的问题,请不要使用with语句,并在完成与该文件相关的工作后手动关闭文件。

来自docs

  

在处理文件时,最好使用with关键字   对象。这样做的好处是文件正确后关闭   它的套件即使在路上引发异常也会完成。

答案 2 :(得分:0)

如果没有更多上下文,您的示例没有多大意义,但我将假设您有合法需要多次打开同一文件。正好回答你的要求,你可以试试这个:

x = lambda:open("test.txt", "a")

with x() as xfile:
    xfile.write("hi")

#works fine until I try again later in the script

with x() as yfile:
    yfile.write("hello")

答案 3 :(得分:0)

使用with语句的常用方法(实际上我认为它们的唯一工作方式)是with open("text.txt") as file:

with语句用于处理需要打开和关闭的资源。

with something as f:
    # do stuff with f

# now you can no longer use f

相当于:

f = something
try:
    # do stuff with f
finally:    # even if an exception occurs
    # close f (call its __exit__ method)
# now you can no longer use f