[英]Extract IP addresses from text file without using REGEX
我正在尝试从文本文件中提取 IPv4 地址并将它们作为列表保存到新文件中,但是,我不能使用正则表达式来解析文件,而是单独检查字符。 不太确定从哪里开始,我发现的所有内容似乎都将 import re 作为第一行。
到目前为止,这就是我所拥有的,
#Opens and prints wireShark txt file
fileObject = open("wireShark.txt", "r")
data = fileObject.read()
print(data)
#Save IP adresses to new file
with open('wireShark.txt') as fin, open('IPAdressess.txt', 'wt') as fout:
list(fout.write(line) for line in fin if line.rstrip())
#Opens and prints IPAdressess txt file
fileObject = open("IPAdressess.txt", "r")
data = fileObject.read()
print(data)
#Close Files
fin.close()
fout.close()
所以我打开文件,并创建了将提取的 IP 放入的文件,我只是不知道如何在不使用 REGEX 的情况下提取它们。
谢谢您的帮助。
这是一个可能的解决方案。
function find_first_digit
, position 文本中下一个数字的索引(如果有)并返回True
。 否则返回False
函数get_dot
和get_num
读取一个数字/点,并让 position 的索引紧跟在数字/点之后,并将数字/点作为str
返回。 如果其中一个函数未能获得数字/点,则会引发MissMatch
异常。
在主循环中,找到一个数字,保存索引,然后尝试得到一个 ip。
如果成功,将其写入 output 文件。
如果任何被调用的函数引发MissMatch
异常,请将当前索引设置为保存的索引加一并重新开始。
class MissMatch(Exception):pass
INPUT_FILE_NAME = 'text'
OUTPUT_FILE_NAME = 'ip_list'
def find_first_digit():
while True:
c = input_file.read(1)
if not c: # EOF found!
return False
elif c.isdigit():
input_file.seek(input_file.tell() - 1)
return True
def get_num():
num = input_file.read(1) # 1st digit
if not num.isdigit():
raise MissMatch
if num != '0':
for i in range(2): # 2nd 3th digits
c = input_file.read(1)
if c.isdigit():
num += c
else:
input_file.seek(input_file.tell() - 1)
break
return num
def get_dot():
if input_file.read(1) == '.':
return '.'
else:
raise MissMatch
with open(INPUT_FILE_NAME) as input_file, open(OUTPUT_FILE_NAME, 'w') as output_file:
while True:
ip = ''
if not find_first_digit():
break
saved_position = input_file.tell()
try:
ip = get_num() + get_dot() \
+ get_num() + get_dot() \
+ get_num() + get_dot() \
+ get_num()
except MissMatch:
input_file.seek(saved_position + 1)
else:
output_file.write(ip + '\n')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.