0
使用Python 2.4,我正在閱讀一個大的平面文件並選擇一個特定的行號。現在我想在該行號之前搜索一個字符串,例如START
,並在該行號之後搜索字符串END
。在兩個方向上搜索一個行號的字符串
如何獲取最近出現的字符串START
(當前行號碼前)和END
(當前行號碼後)的行號?
使用Python 2.4,我正在閱讀一個大的平面文件並選擇一個特定的行號。現在我想在該行號之前搜索一個字符串,例如START
,並在該行號之後搜索字符串END
。在兩個方向上搜索一個行號的字符串
如何獲取最近出現的字符串START
(當前行號碼前)和END
(當前行號碼後)的行號?
如何:
line_no = 1
# Seek the last START before reaching the target line.
start_line_no = -1
while line_no != target_line_no:
line = input.readline()
if line == "":
# File is shorter than you think.
break
line_no += 1
if START in line:
start_line_no = line_no
# Seek the first END after the target line.
end_line_no = -1
while true:
line = input.readline()
if line == "":
# END could not be found.
break
line_no += 1
if END in line:
end_line_no = line_no
break
print start_line_no, end_line_no
感謝這個代碼。但是,說我正在使用一個非常大的文件,我正在尋找的內容是在文件的中間。從一開始就搜索每一行不是很密集嗎?有沒有更有效的方法來做到這一點? – GPX 2011-05-30 11:09:36
首先得到它正確,然後測量,然後看看是否需要優化。基於你所猜測的效率低下的過早優化是所有邪惡的根源。 – msw 2011-05-30 11:14:11
如果這些行的長度是任意的,那麼沒有比這更有效的方法(除了爲將來的操作預處理文件)。 順序文件訪問是一種超快速操作。在尋找棘手的優化之前,我會嘗試一下。 – 2011-05-30 11:17:51