3

私はここに数日いました。これが私がやろうとしていることです:

  1. 既存のcsvファイルを追加モードで開きます
  2. csvの新しい行の文字列を下部に追加します(下の「バッファ」)
  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")

追加情報:

  • モードは確かに=='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

ここでは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 に答える