0

それで、昨日、正規表現を行ごとに印刷するようにしました。今日、ifステートメントを削除し、「結果」を正規表現に等しく設定して、リストに追加できるようにしました。それは私の(dns + '\ n')を壊しました。多分関連するかどうか。私に表示されているエラーは次のとおりです。

    dns.append(result+'\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

コード:

import re
import pandas as pd

dns = []
addstrip = []
with open('ns.txt', 'r') as file:
    lines = file.read().splitlines()

    for line in lines:
        #result = (re.search(r'(\W\S+)(\.)(\S+)(\.)(\S\S\S+)', line))
        result = (re.search(r'^(add lb vserver) (\S+)(\.)(\S+)(\.)(\S+)', line))
        dns.append(result+'\n')
        print(dns)
    with open('dnsout.txt', 'w') as f:
        f.writelines(str(dns))

'\n' なしで出力

[None]
[None, None]
[None, None, None]
[None, None, None, None]
[None, None, None, None, None]
[None, None, None, None, None, None]

古いコード:

dns = []
with open('ns.txt', 'r') as file:
    lines = file.read().splitlines()
    for line in lines:
        if re.search(r'^(add lb vserver )(\S+) (\S+) (\S+)(.+)$', line):
            dns.append(line)
            print(dns)
    with open('dnsout.txt', 'w') as f:
        f.writelines(lines)

「なし」の後の後の出力:

match='add lb vserver SSL_INT_unucrepSL.oncologysupply.c>, <_sre.SRE_Match object; span=(0, 51), match='add lb vserver SSL_EXT_unucrepSL.oncologysupply.c>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_INT_hotfixunucrepsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_EXT_hotfixunucrepsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_EXT_hotfixunucwcfsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_INT_hotfixunucwcfsl.oncologysu>, <_sre.SRE_Match object; 

上記のコードでは、実際には正規表現の結果ではなく、行全体を出力していました。出力は行ごとでしたが、正規表現の結果が異なるデータ型である可能性がありますか?

Pandas は後でこの下のコードで使用されるため、無視してかまいません。行で区切るにはどうすればよいでしょうか。+'\n' を取ることができる他のタイプに変換する必要があると思います。ヘルプ、ヒント、またはトリックは大歓迎です。読んでくれてありがとう。

4

1 に答える 1