[英]Python - Convert a list from a text file containing IP's addresses and dissimilar data, to CSV
我的任务是从多个文本文件创建NFS共享和关联IP的列表,并将其另存为CSV。 该文件包含NFS共享名和IP以及我不想包含在CSV中的其他数据
文本文件示例:
/ vol / vm-01
-sec = sys,rw = 10.44.160.133:10.44.160.132:10.44.160.131:10.44.160.130,root = 10.44.160.133:10.44.160.132:10.44.160.131:10.44.160.130 / vol / vol01
-sec = sys,rw = 10.44.202.39:10.44.202.73,root = 10.44.202.39:10.44.202.73
我已经使用了正则表达式,并且很容易地滤除了IP,但是找不到合并卷名的方法。
# Scrape file for IP's using RegEx
with open('input.txt') as f:
qlist = [re.findall( r'[0-9]+(?:\.[0-9]+){3}', i ) for i in f.readlines()]
for x in range(len(qlist)):
print(qlist[x])
示例输出:
['10 .44.160.133','10.44.160.132','10.44.160.131','10.44.160.130','10.44.160.133','10.44.160.132','10.44.160.131','10.44.160.130'] [ '10 .44.202.39','10.44.202.73','10.44.202.39','10.44.202.73']]
所需输出:
['vm-01','10.44.160.133','10.44.160.132','10.44.160.131','10.44.160.130','10.44.160.133','10.44.160.132','10.44.160.131',' 10.44.160.130'] ['vol01','10 .44.202.39','10 .44.202.73','10 .44.202.39','10 .44.202.73']
该表达式确实返回了两个期望的输出,并且您可以并简单地编写其余的脚本,以便获得最终的输出:
import re
regex = r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|\/[^\/]+\/([^\/]+?)(?=\s+-sec)"
test_str = "/vol/vm-01 -sec=sys,rw=10.44.160.133:10.44.160.132:10.44.160.131:10.44.160.130,root=10.44.160.133:10.44.160.132:10.44.160.131:10.44.160.130 /vol/vol01 -sec=sys,rw=10.44.202.39:10.44.202.73,root=10.44.202.39:10.44.202.73"
print(re.findall(regex, test_str))
[('','vm-01'),('10 .44.160.133',''),('10 .44.160.132',''),('10 .44.160.131',''),('10 .44.160.130 ',''),('10 .44.160.133',''),('10 .44.160.132',''),('10 .44.160.131',''),('10 .44.160.130',''), ('','vol01'),('10 .44.202.39',''),('10 .44.202.73',''),('10 .44.202.39',''),('10 .44.202.73',' ')]
在regex101.com的右上角对表达式进行了说明,如果您希望对其进行探索/简化/修改,并且在此链接中 ,您可以根据需要观看它与某些示例输入的匹配方式。
这是完成工作的一种方法:
import re
qlist = []
with open('input.txt') as f:
for line in f.readlines():
tmp = []
# search the volume name
m = re.search(r'/vol/(\S+)', line)
tmp.append(m.group(1))
# loop on all IPs
for i in re.findall( r'[0-9]+(?:\.[0-9]+){3}', line ):
tmp.append(i)
qlist.append(tmp)
for x in range(len(qlist)):
print(qlist[x])
输出:
['vm-01', '10.44.160.133', '10.44.160.132', '10.44.160.131', '10.44.160.130', '10.44.160.133', '10.44.160.132', '10.44.160.131', '10.44.160.130']
['vol01', '10.44.202.39', '10.44.202.73', '10.44.202.39', '10.44.202.73']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.