继续从剩下的位置读取文件

时间:2015-06-30 12:23:10

标签: python

我必须多次读取一个文件,其中每天都会附加一些错误信息。有没有办法从前一天开始读取文件,而不是从头开始读取?我没有权限写入文件。所以标记结束是不可选择的。我得到的一种可能的方法是存储光标位置,然后下次寻找那个位置..有没有其他方法通过python?

2 个答案:

答案 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)
    }

沿着这些方向发展。

希望有所帮助