簡體   English   中英

Python-將包含IP地址和不同數據的文本文件列表轉換為CSV

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM