0

私は巨大なSQLファイルを小さなSQLファイルに分割しようとしています.Pythonを使用してこれを達成していますが、使用しているコードは一致せず、Googleで見たものと一致するはずです.

コードは次のとおりです。

    import sys, re
    p = [0]
    f = open('/root/testsql/data.sql', 'r')
    tables =["tabel1", "table2"]
    contor = 0;
    con = 0;

    for line in f:
        for table in tables:
            stri = "root/testsql/" + str(con)
            con = con + 1
            stri2 = ".*" + table + ".*"
            if re.match(stri2,line):
                    print table
                    f2 = open(stri,"w")
                    f2.write(line)
                    f2.close()

re.match が機能しない理由を誰かが知っているなら、それは大歓迎です。

SQL ファイルは非常に長く (73595 行)、次のような行が含まれています。

insert into table ...
insert into table
4

4 に答える 4

3

逐語的な文字列のみを探しています。その場合、正規表現はやり過ぎです。代わりに、次を使用しますin

for line in f:
    for table in tables:
        # snip...
        if table in line:
            # ...
于 2012-06-22T16:02:16.017 に答える
2

おもう

stri2 = ".*" + table + ".*"

次のようにする必要があります。

stri2 = ".*?" + table + ".*"

.* は貪欲で、行全体に一致します。

于 2012-06-22T15:54:41.333 に答える
1

で正規表現をラップするre.search代わりに、の代わりに使用する必要があります。re.match.*

一致が見られない理由は、入力が改行で終わり、ドット メタ文字が改行と一致しないためです。

于 2012-06-22T15:58:35.763 に答える
0

char が解釈されたときにだまされないように、正規表現ではプレーン文字列の代わりに生の文字列を使用します。

r'.*' + テーブル + r'.*'

于 2012-06-22T16:20:52.220 に答える