是否可以将变量定义为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,然后我发布了一个新问题。)
答案 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