情景
最后有一个文件包含两个空白行。当我向文件追加一些内容时,它会在两个空白行后写入(这是肯定的)。
但我只想要一个空行并删除第二个空白行。代替第二个空白行,应写入附加数据。
#-------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()之外的任何想法也受到赞赏。
非常感谢任何帮助。
答案 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(尤其是缓冲区问题)..