Python - 在附加模式下打开文件。写不要发生

时间:2012-09-27 19:01:02

标签: python file-io append

我已经在这一天待了几天。这就是我想要做的事情:

  1. 以附加模式打开已存在的csv文件
  2. 在底部添加一串新的csv行(下面的'缓冲区')
  3. 关闭文件
  4. 重命名反映上次输入数据日期的文件。
  5. 我的代码片段:

    if mode == 'a':
        print buffer
        print fn
        f = open(fn,mode)
        f.write(buffer)
        #f.write("\nfoo,bar")
        f.close()
        print f.closed
        os.rename(".\\out\\" + fn, ".\\out\\" + fn[0:17]+tdy[0:4]+ "_" + tdy[5:7] + "_" + tdy[8:10] + ".csv")
    

    其他信息:

    • 模式确实=='a'它进入循环。

    • buffer打印。打印为多行csv数据字符串,如:

      foo, bar, foo, bar
      foo, bar, foo, bar
      foo, bar, foo, bar
      
    • fn是我正在尝试打开并正确打印的正确文件名。

    • f.closed返回True

    • os.rename可以使用并重命名该文件。当我打开它时,缓冲区没有被追加。

    • 我尝试在关闭之前添加flush()

    • 我没有重命名就试过了。

    • 我试图附加一个硬编码字符串。

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在处理两个文件。

您打开fn以写入当前目录,但您重命名文件'.\out\' + fn

打开fn时,请确保使用正确的目录:

f = open(r'.\out\' + fn ,mode)

请注意,在Windows上,您也可以使用/分隔符,这样更容易处理,因为您不必使用原始字符串或转义斜杠。此外,最好使用os.path.join()来处理目录和文件:

filename = os.path.join('./out', fn)

然后在整个函数中使用filename