私は このrosalindの問題 を試していて、問題が発生しています。コードのすべてが正しいと思いますが、意図したとおりに実行されていないため、明らかにそうではありません。ファイルの内容を削除してから、そのファイルにテキストを書き込みます。プログラムは希望するテキストを書き込みますが、最初の内容を最初に削除しません。
def ini5(file):
raw = open(file, "r+")
raw2 = (raw.read()).split("\n")
clean = raw2[1::2]
raw.truncate()
for line in clean:
raw.write(line)
print(line)
私は見た:
python script? で書き込む前にファイルの内容を削除する方法
しかし、私の問題はまだ続きます。何が悪いのですか?
truncate()
は、現在の位置で切り捨てます。そのドキュメントによると、強調が追加されました:
ストリームのサイズをバイト単位で指定されたサイズに変更します(またはサイズが指定されていない場合は現在の位置)。
read()
の後、現在の位置はファイルの終わりです。同じファイルハンドルで切り捨てて書き換える場合は、seek(0)
を実行して先頭に戻る必要があります。
したがって:
_raw = open(file, "r+")
contents = raw.read().split("\n")
raw.seek(0) # <- This is the missing piece
raw.truncate()
raw.write('New contents\n')
_
(raw.truncate(0)
を渡すこともできますが、これによりポインタ(つまり、今後の書き込みの場所)がファイルの先頭以外の場所に残り、起動時にファイルがまばらになります。その位置に書き込みます)。
ファイル内の古いデータを完全に上書きする場合は、別のmode
を使用してファイルを開く必要があります。
そのはず:
raw = open(file, "w") # or "wb"
問題を解決するには、まずファイルの内容を読み取ります。
with open(file, "r") as f: # or "rb"
file_data = f.read()
# And then:
raw = open(file, "w")
次に、write
モードを使用してファイルを開きます。これにより、ファイルにテキストを追加せず、データのみを書き込むことができます。
モードファイルについて読む ここ 。