それで、昨日、正規表現を行ごとに印刷するようにしました。今日、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' を取ることができる他のタイプに変換する必要があると思います。ヘルプ、ヒント、またはトリックは大歓迎です。読んでくれてありがとう。