[英]How do I write only the matching regex to a new file in Python?
我的目標是僅將 IP 地址和 append 地址提取到新文件中。 我擁有的文件名為 error_log.txt ,其中包含以下行:
[Sun Jun 7 16:45:56 2020] [info] [client 64.242.88.10] (104)Connection reset by peer:客戶端在發送正文完成之前停止連接
[Sun Jun 7 17:13:50 2020] [info] [client 64.242.88.10] (104)Connection reset by peer:客戶端在發送正文完成前停止連接
目標是將 IP 的“64.242.88.10”和 rest 寫入新文件。
我可以打印 function 來只給我 IP,但是當它寫入文件 'ip_only.txt' 時,它會打印錯誤日志中的完整行。
我怎樣才能只獲取新文件的 IP(在一列中)?
獎勵,當它在測試時打印時,它也給了我空白行。 我怎樣才能省略這些行?
import re
with open('error_log.txt', 'r') as file:
fi = file.readlines()
ip_only = open('ip_only.txt', 'w+')
re_ip = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
for line in fi:
ip = re.findall(re_ip, line)
ip_only.write(str(line))
# print(ip)
您需要將ip
變量寫入文件而不是包含原始line
的行:
for line in fi:
ip = re.findall(re_ip, line)
ip_only.write(str(ip))
# ip_only.txt:
# ['64.242.88.10']['64.242.88.10']
此外,要從 output 中刪除括號和引號(注意re.findall()
返回字符串列表)並將每個 IP 地址打印到新行:
for line in fi:
ips = re.findall(re_ip, line)
for ip in ips:
ip_only.write(ip + '\n')
# ip_only.txt:
# 64.242.88.10
# 64.242.88.10
在寫入文件時,您正在寫入整行。 而是只寫下面的IP ip_only.write(str(ip))
為避免出現空行,您可以使用 if 條件來檢查 ip 是否在給定行中找到。
for line in fi:
ip = re.findall(re_ip, line)
if ip:
ip_only.write(str(ip))
如果print(ip)
給你預期的結果,那么你應該使用write(ip)
而不是write(line)
正則表達式給出列表,因此您可能只需要編寫ip[0]
。 您需要添加\n
才能移動到下一行。
ip_only.write(ip[0] + "\n")
至於空行 - 首先刪除所有空格、制表符、回車,然后與空字符串""
進行比較。 或者使用空字符串在if/else
中使用時給出False
的事實
line = line.strip()
if line:
# ... code ...
import re
fi = [
'[Sun Jun 7 16:45:56 2020] [info] [client 64.242.88.10] (104)Connection reset by peer: client stopped connection before send body completed',
'[Sun Jun 7 17:13:50 2020] [info] [client 64.242.88.10] (104)Connection reset by peer: client stopped connection before send body completed',
]
ip_only = open('ip_only.txt', 'w+')
re_ip = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
for line in fi:
line = line.strip()
if line:
ip = re.findall(re_ip, line)
ip_only.write(ip[0] + "\n")
print(ip[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.