如何清理NsLookup输出结果中的\r、\n及\r\n\r\n等转义换行字符
问题根因
subprocess.check_output()默认返回bytes类型对象,直接传入字符串参数调用strip()类型不匹配,无法生效strip()只能去除字符串首尾的指定字符,无法清理内容中间的换行、回车符- 原代码遍历对象错误:创建
csv.DictReader后直接遍历csvfile会拿到原始行文本,而非结构化的行数据,会导致nslookup查询参数错误
具体实现方案
方案1:完全清除所有换行、回车符,输出合并为单行
import os import subprocess import socket import datetime import re import csv import pprint with open('NewData.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) # 请将下方的'domain'替换为你CSV文件中存储查询目标(域名/IP)的列名 for row in reader: query_target = row['domain'].strip() proc = subprocess.check_output(['nslookup', query_target]) # 字节转字符串,Windows系统出现乱码时可将utf-8替换为gbk res_str = proc.decode('utf-8', errors='ignore') # 替换所有\r、\n字符为空格 cleaned_res = res_str.replace('\r', '').replace('\n', ' ') print(cleaned_res)
方案2:保留正常换行,仅清除多余的连续空行
如果需要保留Server、Address等字段的换行分隔,只删除末尾多余的\r\n\r\n空行,可使用以下清理逻辑替换上面的清理代码:
# 合并连续的换行、回车为单个换行,再去除首尾空白 cleaned_res = re.sub(r'[\r\n]+', '\n', res_str).strip()
补充说明
如果仅需要去除首尾的空行,不需要修改中间内容,解码后直接调用strip()即可:
cleaned_res = proc.decode('utf-8', errors='ignore').strip()
内容的提问来源于stack exchange,提问作者Anthony Dawson
相关产品推荐
相关产品推荐

