2

py モジュールでは、次のように記述します。

outFile = open(fileName, mode='w')
if A:
    outFile.write(...)
if B:
    outFile.write(...)

これらの行では、flush または close メソッドを使用しませんでした。次に、これらの行の後、この「outFile」オブジェクトが空かどうかを確認したいと思います。どうすればそれを行うことができますか?

4

4 に答える 4

4

コードにはいくつかの問題があります。

  1. .writeで開いたファイルにはアクセスできません'r'。する必要がありopen(fileName, 'w')ます。

  2. その場合A or B、確かにファイルに書き込んだので、空ではありません!

それらを除いて。でファイルの長さを取得できます

os.stat(outFile.fileno())

編集:私は何を説明flushします。Python は、非常に大量のファイルの読み取りと書き込みを行うためによく使用されますが、これは遅くなる可能性があります。したがって、それらを可能な限り高速にするように調整されています。そのための 1 つの方法は、そのような書き込みを「バッファリング」してから、それらすべてを 1 つの大きなブロックで行うことです。小さな文字列を書き込むと、Python はそれを記憶しますが、そうすべきだと判断するまで、実際にはファイルに書き込みません。

これは、 fileを検査してファイルにデータを書き込んだかどうかを確認したい場合、Python に記憶しているすべてのデータを最初に書き込むように指示する必要があることを意味します。そうしないと、データが表示されない可能性があります。flushバッファリングされたすべてのデータを書き込むコマンドです。

もちろん、ファイルに何かを書き込んだかどうかを Python に問い合わせると、たとえばファイル内の位置を調べて ( .tell())、バッファリングについて知ることができます。

于 2012-12-20T15:56:37.470 に答える
1

os.statを使用してファイル情報を取得できます。

import os
fileSize = os.stat(fileName).st_size
于 2012-12-20T15:55:53.197 に答える
1

すでにファイルに書き込んでいる.tell()場合は、現在のファイル位置がゼロでないかどうかを確認するために使用できます。

>>> handle = open('/tmp/file.txt', 'w')
>>> handle.write('foo')
>>> handle.tell()
3

.seek()ファイルの先頭に戻ると、これは機能しません。

于 2012-12-20T15:57:58.717 に答える
1
with open("filename.txt", "r+") as f:
    if f.read(): 
        # file isn't empty
        f.write("something")
        # uncomment this line if you want to delete everything else in the file
        # f.truncate()
    else:
        # file is empty
        f.write("somethingelse")

「r+」モードでは、常に読み書きできます。「with」は自動的にファイルを閉じます

于 2012-12-20T15:58:49.777 に答える