3

我已经在这家住了几天了。这是我正在尝试做的事情:

  1. 以追加模式打开一个已经存在的 csv 文件
  2. 将一串新的csv行添加到底部(下面的'buffer')
  3. 关闭文件
  4. 重命名文件以反映最后输入数据的日期。

我的代码片段:

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")

附加信息:

  • mode 确实 == 'a' 它进入了循环。

  • buffer印刷。打印为一串多行 csv 数据,例如:

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

  • f.closed返回True

  • os.rename工作并重命名文件。当我打开它时,尚未附加缓冲区。

  • 我试过flush()在关闭前添加一个。

  • 我试过没有重命名。

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

有任何想法吗?

4

1 回答 1

2

您在这里处理两个文件。

您在当前目录中打开fn以进行写入,但您将文件重命名为.'.\out\' + fn

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

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

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

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

然后filename在整个功能中使用。

于 2012-09-27T19:22:31.510 回答