1

我的意图是在某些符合某些条件的行之间添加一些行(条件不是直截了当的,并且来自代码逻辑)。我使用 tell() 函数来获取要放置新行的位置。此外,我使用 readlines() 将文本部分保存到该位置,并将文件的其余部分保存在两个列表中,如下所示。

这样,我计划将新行添加到第一个列表中,然后附加到第二个列表中,这样我就可以将它们一起写入原始文件。

fp.open("path", "r")
<some logic to find where the new lines are to be inserted>
insertPos = fp.tell()
firstPart = fp.readlines(insertPos)
secondPart = fp.readlines()
firstPart.insert(len(firstPart)+1, newLines)
newContent = firstPart+secondPart)
fp.writelines(newContent)
fp.close()

但问题是,当使用 tell() 的第一个输出完成 readlines() 来放置合并列表时,它没有指向文件中的正确行。它向前移动了更多的行。iefirstPart 不完全在 insertPos 处拆分。有什么我在这里想念的吗?任何帮助将不胜感激。

4

2 回答 2

2

如果文件不是很大,我会这样做而不是弄乱缓冲区位置:

lines = list(open(filename))
i = ... # figure out what line you want to insert before
lines.insert(i,new_line)
open(filename,'w').write('\n'.join(lines))
于 2013-11-07T18:47:02.233 回答
0

如果您只是将整个文件读入一个列表,然后修改该列表并将其写出,您的逻辑会容易得多。

在这里,我们使用切片表示法将整个列表添加到lines_to_add位置:loc

lines = fp.readlines()
new_lines = lines[:loc] + lines_to_add + lines[loc:]

然后直接写出来。

于 2013-11-07T18:50:49.523 回答