0

サーバーでボットを検索して削除する新しいセクションをプログラムに追加しようとしていますが、プログラムが2番目の部分に到達するたびに、ショーを停止する問題が発生します(追加したもの) 「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()を初めて実行するときに、すべての行を読み取っています。

2回目にreadlinesを呼び出すと、ファイルの最後から開始されるため、読み取るものはありません。

変数は無価値です。readFirst名前の悪い変数にはすでにすべての行がありreadFourthFromBottomます。

于 2012-12-10T19:23:59.237 に答える
0

readlines()ファイルストリームの最後まで読み取ります。これは、カーソルがファイルの最後にあることを意味します。実際、ここでの問題readFourthFromBottomは、変数名が不正確であるということです。all_linesリスト内のファイルのすべての行が含まれるため、である必要があります。次に、への行を読み直そうとする代わりに、それを使用する必要がありますreadFirst

于 2012-12-10T19:25:18.843 に答える
0

readlinesIO オブジェクトからすべての行を読み取ります。そのため、その後ファイルから何かを読み取ろうとすると EOF が発生し、2 回目readlinesはそれ以外は返されません。

もう一度使用する前にファイルの先頭にシークするか、一度読んだ行を再利用することをお勧めします。変更しない限り(ひどい変数名です)、変更しない限り、行をもう一度読む必要はありません。readlinesreadFourthFromBottom

于 2012-12-10T19:26:56.240 に答える