我必须多次读取一个文件,其中每天都会附加一些错误信息。有没有办法从前一天开始读取文件,而不是从头开始读取?我没有权限写入文件。所以标记结束是不可选择的。我得到的一种可能的方法是存储光标位置,然后下次寻找那个位置..有没有其他方法通过python?
答案 0 :(得分:6)
您可以使用python tell
文件方法在关闭文件之前查看文件中的位置,并在再次打开文件后使用seek
方法返回该位置。
示例:
给定文件foo
,内容为
edas
agfa
agf
fgfgfg
您可以按如下方式返回给定位置:
>>> f = open('foo')
>>> f.tell()
0
>>> f.readline()
'edas\n'
>>> f.tell()
5
>>> f.close()
>>> f = open('foo')
>>> f.tell()
0
>>> f.seek(5)
>>> f.readline()
'agfa\n'
答案 1 :(得分:1)
是的 - 这是可能的。我相信 - 你有一个文件,其大小非常大,你不想每次都从头开始阅读。所以这是你可以做的事情 - 写入你的主目录if not os.path.exists('/home/.fileinfo'):
seek_from = 0
else:
of = open('/home/.fileinfo', 'r')
seek_from = int(of.readline().strip())
with open('/path/to/your/file', 'r') as f:
f.seek(seek_from, 0)
# do whatever you want
f.seek(0,-1) # Go to the end of the file
end = f.tell() # Get the position
of = open('/home/.fileinfo', 'w')
of.write(str(end))
of.close()
中的文件或其他内容,然后写入你在该文件中读取的文件的最后一个偏移量。然后你的程序可以执行类似下面的操作
if (is.null(srtRow) && is.null(colRow)) {
axis(4, iy, labels = labRow, las = 2, line = -0.5 + offsetRow,
tick = 0, cex.axis = cexRow, hadj = adjRow[1], padj = adjRow[2])
}
else {
if (is.null(srtRow) || is.numeric(srtRow)) {
xpd.orig <- par("xpd")
par(xpd = NA)
ypos <- axis(4, iy, labels = rep("", nr), las = 2, #change
line = -0.5, tick = 0)
text(x = par("usr")[2] + (1 + offsetRow) * strwidth("M"),
y = ypos, labels = labRow, adj = adjRow, cex = cexRow,
srt = srtRow, col = colRow)
par(xpd = xpd.orig)
}
沿着这些方向发展。
希望有所帮助