【问题标题】:Python - File append/write does not write to file despite closing/flushing the file objectPython - 尽管关闭/刷新文件对象,文件追加/写入不会写入文件
【发布时间】:2021-01-23 20:17:59
【问题描述】:

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

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)

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    尝试在 Write 中打开文件。

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

    只是好奇,为什么你需要太相同的功能?

    【讨论】:

    • 已编辑原帖;上面的代码只是伪代码——我拥有的两个实际功能的目的不同;他们正在获取要写入文件的不同内容(文件本身是我正在创建的用于监视单独进程的文本文件)。
    • 哦,我明白了。只是好奇。
    【解决方案2】:

    尝试使用带有“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()
    

    【讨论】:

      【解决方案3】:

      首先,您忘记在函数中添加冒号(:),例如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")
      
      

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

      【讨论】:

        【解决方案4】:

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

        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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 2011-12-24
          • 1970-01-01
          • 2013-08-15
          • 2015-03-26
          • 2017-09-15
          相关资源
          最近更新 更多