Python -文件追加/写入不会写入文件,尽管关闭/刷新文件对象



我有类似于以下伪代码的代码:

def getFirstSet():
file1 = open("log.txt", 'a')
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')
file1.close()
def getSecondSet():
file1 = open("log.txt", 'a')
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')
file1.close()
getFirstSet()
getSecondSet()
以上只是伪代码-这两个函数在实际代码中有很大的不同-具有不同的输出/解析和目的。

我遇到的问题是,第一个函数执行正确,所需的项目被写入文件。执行第二个函数,没有返回错误,但是没有通过第二个函数写入内容。我知道缓冲的问题可以通过刷新或关闭有问题的文件来解决,但是无论哪种方式,代码都会失败。有人知道为什么会这样吗?我是不是漏掉了什么概念?

我还需要将代码附加到现有文件,而不是覆盖(因此使用'a'而不是'w')。(Python 3, Windows 10)

尝试在Write中打开文件。

file1 = open("log.txt", 'w')

我很好奇,为什么需要这么多相同的函数?

尝试用'w'标记with open() as outfile:。示例代码为:

def getFirstSet():
with open("log.txt", 'w') as file1:
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')



def getSecondSet():
with open("log.txt", 'w') as file1:
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')
getFirstSet()
getSecondSet()

首先,您忘记在函数中添加冒号(:),例如def getFirstSet():,我认为这就是为什么它不起作用。

对于上面的代码,您可以使用一个函数来编写。

def writeContent(file):
file1 = open(file, 'a')
list1 = ["item1", "item2", "item3", "item4"]
for item in list1:
file1.write(item + 'n')
file1.close()
writeContent("log.txt")
writeContent("log.txt")

还可以在调用函数时传递项目列表。

我找到了一个解决方案;我不确定为什么这会起作用,但是使用上下文管理器在调用函数之外打开和关闭文件似乎可以解决这个问题。唯一的区别是文件只关闭和打开一次,而不是两次。

def getFirstSet(file1):
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')
file1.close()
def getSecondSet(file1):
list1 = [item1, item2, item3, item4, ...]
for item in list1:
file1.write(item + 'n')
file1.close()
with open("log.txt", "a") as file1:
getFirstSet(file1)
getSecondSet(file1)

最新更新