python写入文件前置空字符

时间:2014-11-13 01:50:56

标签: python file-io

我正在尝试维护一个偏移值的文件(file.tell),以便在重新启动时进程可以跳过这么多字符。

所以我有一个truncate / write / flush序列。但每次它将空字符放在文件的顶部。模式显示空字符数等于前一个文件内容的长度。

我已经转载了下面的会议。我将非常感谢您帮助我们了解如何获取这些空值。

非常感谢。

dinesh@c1 ~/lab $ python
Python 2.6.8 (unknown, Jul 16 2013, 14:48:55)
[GCC 4.3.4 [gcc-4_3-branch revision 152973]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os,fcntl
>>> f=os.open("ha.offset", os.O_RDWR, 0744)
>>> fcntl.lockf( f, fcntl.LOCK_EX | fcntl.LOCK_NB )
>>> fd = os.fdopen(f, "w+")
>>> msg="first=123\nsecond=234\n"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+  Stopped                 python
dinesh@c1 ~/lab $ wc ha.offset
 2  2 21 ha.offset
dinesh@c1 ~/lab $ fg
python
>>> msg="first=987\nsecond=9877\n"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+  Stopped                 python
dinesh@c1 ~/lab $ wc ha.offset
 2  2 43 ha.offset
dinesh@c1 ~/lab $ od -c ha.offset
0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0  \0   f   i   r   s   t   =   9   8   7  \n   s
0000040   e   c   o   n   d   =   9   8   7   7  \n
0000053
dinesh@c1 ~/lab $ fg
python
msg="first=1"
msg="first=1"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+  Stopped                 python
dinesh@c1 ~/lab $ !od
od -c ha.offset
0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0000040  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   f   i   r   s   t
0000060   =   1
0000062

1 个答案:

答案 0 :(得分:2)

docs for truncate表示维护文件中的位置:

  

file.truncate([大小])

     

截断文件的大小。如果存在可选的大小参数,则文件将截断为(最多)该大小。大小默认为当前位置。当前文件位置未更改。请注意,如果指定的大小超过文件的当前大小,则结果取决于平台:可能包括文件可能保持不变,增加到指定大小,就像零填充一样,或者使用未定义的新内容增加到指定大小。可用性:Windows,许多Unix变体。

所以我怀疑你需要在第一次和第二次写入之间的某个地方fd.seek(0)