0

我正在尝试向我的程序添加一个新部分,该部分在我们的服务器上搜索机器人并删除它们,但我遇到了一个停止显示的问题:每当程序进入第二部分(我已经添加) “readFirst”的输出是“[]”。当接下来的几行运行时,出于显而易见的原因,我得到一个“列表索引超出范围”错误。

我不知道为什么会发生这种情况,因为 readlines 变量不应该由程序的两个部分共享。

这是代码:

while runTimes >= 0:
#Cycles through .php files
openedProg = glob.glob('*.php')
openedProg = openedProg[currentPhp:currentPhp+1]
progInput = ''.join(openedProg)
if progInput != '':
    theBot = open(progInput,'r')

    #Singles out "$output" on this particular line and closes the process
    readFourthFromBottom = theBot.readlines()
    wholeLine = (readFourthFromBottom[-4])
    output = wholeLine[4:11]

    #Singles out "set_time_limit(0)"
    readFirst = theBot.readlines()
    print(readFirst)
    wholeLine2 = (readFirst[0])
    output2 = wholeLine2[7:24]
    print(output2)

    theBot.close()
if progInput == '':
    currentPhp = -1
4

3 回答 3

1

第一次执行 readlines() 时,您正在阅读所有行。

第二次调用 readlines 时,它从文件末尾开始,因此没有什么可读取的。

readFirst变量毫无价值,您已经拥有名称不佳的readFourthFromBottom变量中的所有行。

于 2012-12-10T19:23:59.237 回答
0

readlines()一直读取到文件流的末尾,这意味着光标在文件末尾。真的,这里的问题是readFourthFromBottom变量名不准确。它应该是all_lines,因为它将包含列表中文件的所有行。那么你应该只使用它而不是尝试重新读取 to 中的行readFirst

于 2012-12-10T19:25:18.843 回答
0

readlines将从 IO 对象中读取所有行。因此,任何后续尝试从文件中读取内容都会产生 EOF,因此第二次尝试readlines永远不会返回任何其他内容。

您可以在再次使用之前寻找文件的开头readlines,或者更好的是,只需重用您读过的行。除非您修改readFourthFromBottom(顺便说一句,这是一个可怕的变量名),否则您没有理由再次阅读这些行。

于 2012-12-10T19:26:56.240 回答