如何在使用python写入文件之前将文件指针放在一行?

时间:2014-06-10 08:37:07

标签: python file file-pointer

  

情景

最后有一个文件包含两个空白行。当我向文件追加一些内容时,它会在两个空白行后写入(这是肯定的)。

但我只想要一个空行并删除第二个空白行。代替第二个空白行,应写入附加数据。

#-------Original file 
This is line 1 
This is line 2
[--blank line--] 
This is line 3
This is line 4
[--blank line--]
[--blank line--]

追加"这是第5行"和#34;这是第6行和第34行;在上面的文件中。

  

现在发生了什么!

#-------Original file 
This is line 1 
This is line 2
[--blank line--] 
This is line 3
This is line 4
[--blank line--] 
[--blank line--]  
This is line 5
This is line 6
  

我想要的!

#-------Original file 
This is line 1 
This is line 2
[--blank line--] 
This is line 3
This is line 4
[--blank line--]  #Only one blank line. Second blank line should be removed
This is line 5
This is line 6

我已经研究并找到了移动文件指针的解决方案。在将内容附加到文件中时,文件指针可以存在于第二空行之后。 如果我将文件指针向上移动一行然后追加"它是第5行"它会工作吗?和#34;这是第6行和第34行; ?

如果是,那么请协助我该怎么做。 Seek()函数似乎没那么有用!

除了seek()之外的任何想法也受到赞赏。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这是一种逐行读取文件的简单方法,然后将指针恢复到倒数第二个之后的指针:

with open('fname', 'rw') as f:
    prev = pos = 0
    while f.readline():
        prev, pos = pos, f.tell()
    f.seek(prev)
    # Use f

如果您不想花时间阅读该文件,则需要决定例如:支持哪些行结尾,而Python会为你做这些。

答案 1 :(得分:2)

[这是根据适当情况的解决方案,仅适用于'\ n'案例]

我要感谢@otus。他的回答+一些修改解决了我的疑问。 :)

根据场景,我想开始追加新行,默认情况下文件指针在末尾。

#-------Original file 
This is line 1 
This is line 2
[--blank line--] 
This is line 3
This is line 4
[--blank line--]
[--blank line--]
* <-----------------------file pointer is here. 

假设file1是文件对象。 我使用file1.tell()来获取文件指针的当前位置。

在写入文件之前,我刚刚这样做了:

 pos = file1.tell() #gives me current pointer
 pos =  pos - 1     #This will give above value, where second blank line resides
 file1.seek(pos)    #This will shift pointer to that place (one line up)

现在我通常可以像file1.write(“这是第5行”)那样继续写作等等......

感谢otus和Janne(尤其是缓冲区问题)..