0

REを使用する次の関数があります。

def friendSearch():
    os.chdir("C:/Users/David/myFiles")
    files = os.listdir(".")
    for x in files:
        inputFile = open(x, "r")
        content = inputFile.read()
        inputFile.close()
        match = re.search(r'(?<="NAME":)("[^"]+")',content)
    print (match)

文字列を含むファイルがそれ自体のディレクトリにある場合は正常に機能しますが、ディレクトリに他のファイルが追加されている場合は何も返しません。

これは、処理されるファイルごとに「一致」が上書きされるためですか? もしそうなら、どうすればこれを止めることができますか?

前もって感謝します

4

2 に答える 2

3

match問題が各ファイルに上書きされていることは正しいです。各ファイルからのすべての一致を含む単一のリストが必要であると想定しているため、ループの前にmatch = ...使用して空のリストにmatches.extend(...)初期化する代わりに。matches

例えば:

def friendSearch():
    matches = []
    os.chdir("C:/Users/Luke/Desktop/Files")
    files = os.listdir(".")
    for x in files:
        inputFile = open(x, "r")
        try:
            content = inputFile.read()
        except UnicodeDecodeError:
            continue
        inputFile.close()
        matches.extend(re.findall(r'(?<="text":)("[^"]+")',content))
    print (matches)
于 2013-02-27T19:37:58.783 に答える
0

最後matchのファイルからの検索結果のみが含まれます。この行:

match = re.findall(r'(?<="text":)("[^"]+")',content)

その前にあったものを破棄matchします。これを試して:

match = []
for x in files:
  inputFile = open (x, "r")
  try:
    content = inputFile.read()
  except UnicodeDecodeError:
    continue
  inputFile.close ()
  match = match + re.findall (r'(?<="text":)("[^"]+")', content)
于 2013-02-27T19:37:02.717 に答える