意外的文件行为python

时间:2012-11-22 15:42:26

标签: python file output

  

可能重复:
  Weird behavior when writing and reading file

当我尝试写入文件然后阅读时,我得到了意想不到的结果。

我的代码是:

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 +吨\ 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 :/用户/ X /桌面/ ZT \ X08 \ X00 \ X00 \ X00 \ X01 \ X00 \ X00 \ x00s \ X06 \ X00 \ X00 \ X00 \ X0F \ X01 \ r \ X01 \ X0C \ X01'   tRp5 tp6(dp7 ttp8 tp9。'2רְז|lAk!
  €qg¸CkPck$ְBkאBkנBk 8Ck
           xCk XBkxBk°Ck | CkנCkDk
     @'(Ck~Ck kצCk Ck
  ְpg DkDֽ〜F! €qg +〜Ky              (DK       @k @k xDkר?k @fHDkhDkpDk~Dk
  Dk DkEk0EkPEkְ“kצ
        ְpg! ~F,
  “Dk

@k @k                      ר?k

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为这是一个Windows问题,与文件系统块大小有关。如果您在.flush()之前.write() .read(),它将正常运行。我可以在Win7上重现它。

(我认为正在发生的事情是Windows以4KB的块分配您的文件,因此写"Hello"会使您陷入下一个块大小。如果您然后.read(),您会得到随机的乱码其余部分,因为Python还没有机会处理它。如果你.flush()之前.read(),Python正确地写出文件然后你得到一个空字符串。)

答案 1 :(得分:0)

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

我失踪了  f.seek(0)