0

Python 正規表現を使用してファイルを検索するのに少し問題があります。

正規表現のリストを入力し、それらの 1 つに一致するファイルの行を、rexex リストと同じ方法でインデックス付けされたギザギザのリストに返したいと思います。つまり、行が最初の正規表現に一致する場合、追加されます: results[0].append(line)2 番目が一致する場合:results[1].append(line)など...

import re

def search(path, regex_list):
     reg_list = [re.compile(regex) for regex in regex_list]
     results = reg_list.__len__()*[[]]
     with open(path, 'r') as fp:
         for line in fp:
             for i, reg in enumerate(reg_list):
                 if reg.search(line):
                     results[i].append[line]
    return results

print(search("./log", ['1234', '1233']))

出力を次のようにしたいと思います。

[['log entry 1234\n'], ['log entry 1233\n']]

しかし、私が本当に得るのは:

[['log entry 1234\n', 'log entry 1233\n'], ['log entry 1234\n', 'log entry 1233\n']]

私はPythonにかなり慣れていないので、本当にばかげたことをしている可能性があります。それは何ですか?

4

1 に答える 1

2

コード内で空のリスト ( results = reg_list.__len__()*[[]]) のリストを乗算することにより、すべてが同じ空のリストを指すいくつかのポインターを作成するだけです。

後で何らかのコードがそのリストに何かを追加すると、すべてのポインターがその拡張リストを指します。

代わりに、init で (同一ではない) 空のリストのリストを作成します。

[[] for reg in reg_list]
于 2013-11-04T10:47:15.193 に答える