在追加模式下写入指定位置

时间:2013-10-30 16:25:56

标签: python file append

在python中我发现:

a=open('x', 'a+')
a.write('3333')
a.seek(2)       # move there pointer
assert a.tell() == 2  # and it works
a.write('11')   # and doesnt work
a.close()

在x文件中给出333311,但我们用2个字节的偏移量进行了第二次写入,而不是4, 尽管文件流指针已经改变,但是搜索在那里不能用于写入。

===>我的问题:它是更流行语言的编程标准吗?

3 个答案:

答案 0 :(得分:1)

附加模式的文件始终将write()附加到文件的末尾,您可以看到here

  

O_APPEND

     

如果设置,文件偏移量将在每次写入之前设置为文件的末尾。

答案 1 :(得分:1)

来自http://docs.python.org/2.4/lib/bltin-file-objects.html的文档:

  

请注意,如果打开文件进行追加(模式'a'或'a +'),则在下次写入时将撤消任何seek()操作。

'r+'模式打开文件,这意味着“读写”。

答案 2 :(得分:0)

试试mmap。它基本上允许您编辑文件。 来自文档:

import mmap

# write a simple example file
with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

with open("hello.txt", "r+b") as f:
    # memory-map the file, size 0 means whole file
    mm = mmap.mmap(f.fileno(), 0)
    # read content via standard file methods
    print mm.readline()  # prints "Hello Python!"
    # read content via slice notation
    print mm[:5]  # prints "Hello"
    # update content using slice notation;
    # note that new content must have same size
    mm[6:] = " world!\n"
    # ... and read again using standard file methods
    mm.seek(0)
    print mm.readline()  # prints "Hello  world!"
    # close the map
    mm.close()