1

重複の可能性:
ファイルの書き込みおよび読み取り時の奇妙な動作

ファイルに書き込んでから読み取ろうとすると、予期しない結果が発生します。

私のコードは次のとおりです。

f=open("z.txt","w+")
f.write("Hello")
content=f.read()
print content
f.close()

出力されるファイルは次のとおりです。

Hellolףן(I11(S'QUEUE' p1(S'exec' p2 S'runco​​de'p3(cidlelib.rpc unpickle_code p4(S'c \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x00 @ \ x00 \ x00 \ x00s6 \ x00 \ x00 \ x00e \ x00 \ x00d \ x00 \ x00d \ x01 \ x00 \ x83 \ x02 \ x00Z \ x01 \ x00e \ x01 \ x00j \ x02 \ x00d \ x02 \ x00 \ x83 \ x01 \ x00 \ x01e \ x01 \ x00j \ x03 \ x00 \ x83 \ x00 \ x00Z \ x04 \ x00e \ x01 \ x00j \ x05 \ x00 \ x83 \ x00 \ x00 \ x01d \ x03 \ x00S(\ x04 \ x00 \ x00 \ x00s \ x05 \ x00 \ x00 \ x00z.txts \ x02 \ x00 \ x00 \ x00w + t \ x05 \ x00 \ x00 \ x00HelloN(\ x06 \ x00 \ x00 \ x00t \ x04 \ x00 \ x00 \ x00opent \ x01 \ x00 \ x00 \ x00ft \ x05 \ x00 \ x00 \ x00writet \ x04 \ x00 \ x00 \ x00readt \ x07 \ x00 \ x00 \ x00contentt \ x05 \ x00 \ x00 \ x00close(\ x00 \ x00 \ x00 \ x00(\ x00 \ x00 \ x00 \ x00(\ x00 \ x00 \ x00 \ x00s \ x17 \ x00 \ x00 \ x00C:/ Users / x / Desktop / zt \ x08 \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x00s \ x06 \ x00 \ x00 \ x00 \ x0f \ x01 \ r \ x01 \ x0c \ x01'tRp5 tp6(dp7 ttp8tp9。'2רְז׀lAk!
€qg¸CkPCk$ְBkאBkנ
Bk8CkxCkXBkxBk°Ck׀CkנCkDk
@'(Ck〜CkkצCk Ck
ְpgDkDֽ˜F!€qg + ˜Ck
(Dk @k @k xDkר?
k ְ”k
צְpg!〜F、
״Dk

@k @k                      ר?k

私は何が間違っているのですか?

4

2 に答える 2

2

これは、ファイルシステムのブロックサイズに関係するWindowsの問題だと思います。あなたがあなた.flush().write()前にいるなら.read()、それはうまくいくでしょう。Win7で再現できます。

(Windowsはファイルを4KBのブロックに割り当てるため、書き込み"Hello"を行うと次のブロックサイズになり.read()ます。Pythonにはチャンスがなかったため、ブロックの残りの部分からランダムにジブリッシュが発生します。まだ処理する必要があります。ingする.flush()前に.read()、Pythonがファイルを適切に書き出すと、空の文字列が返されます。)

于 2012-11-22T16:00:16.333 に答える
0
f=open("z.txt","w+")
f.write("Hello")
f.seek(0)
content=f.read()
print content
f.close()

私は行方不明でした
f.seek(0)

于 2012-11-22T15:50:27.203 に答える