1

コードのこの部分を最適化するのに問題があります。動作しますが、不必要に遅いようです。この関数はsearchString、ファイル内の a の後に行から検索しline_nr、最初にヒットした行番号を返します。

import linecache
def searchStr(fileName, searchString, line_nr = 1, linesInFile):
# The above string is the input to this function 
# line_nr is needed to search after certain lines.
# linesInFile is total number of lines in the file.

    while line_nr < linesInFile + 1:
        line = linecache.getline(fileName, line_nr)
        has_match = line.find(searchString)
        if has_match >= 0:
            return line_nr
            break
        line_nr += 1

私はこれらの行に沿って何かを試しましたが、「特定の行番号で開始する」入力を実装することはできませんでした。

編集:ユースケース。ヘッダー付きの異なるセクションに分割されたテキストと数値を含む分析ファイルを後処理しています。line_nr のヘッダーは、さらに処理するためにデータのチャンクを分割するために使用されます。

呼び出しの例:

startOnLine = searchStr(ファイル名, 'ヘッダー 1', 1, 10000000): endOnLine = searchStr(ファイル名, 'ヘッダー 2', startOnLine, 10000000):

4

2 に答える 2

1

可能な限り単純な実装から始めてみませんか?

def search_file(filename, target, start_at = 0):
    with open(filename) as infile:
        for line_no, line in enumerate(infile):
            if line_no < start_at:
                continue
            if line.find(target) >= 0:
                return line_no
    return None
于 2013-11-13T10:48:37.180 に答える