2016-12-09 53 views
1

我tyring採取知識產權的人的輸入列表以及它們相應的票號,把它變成一個CSV文件。每個IP的票證都位於列表中IP下方的行上,那麼如何才能讀取IP,解析其下方的票證號碼,並將這些值以CSV格式打印出來?解析下一行的For循環

我的代碼和IP的列表/蒂克斯#的如下。

m = re.search(r'(\d{1,3}.){3}\d{1,3}(-\d{2}|slash\d{2})?',item, re.M|re.I) 
n = re.search(r'10A-\d{6}',item, re.M|re.I) 
for line in fiEsccb: 
    if m in line: 
     #go to below line and extract n (possibly multiple) 
     print m + ',' + n 

列表

8.8.8.8 
Open Menu 10A-002671 10/21/2016 

8.8.8.8 
10A-003079 

8.8.8.8 
10A-003179 10A-003178 10A-003172 10A-003171 10A-003170 

8.8.8.8 
10A-002970 

8.8.8.8 
10A-002970 
+2

發佈您想要的輸出作爲示例至少 – SIslam

回答

0

假設你的數據是一個字符串規則列表,如在你的榜樣,您可以將它分爲三的元組的列表使用itertools

import itertools 
data = ['8.8.8.8', 'Open Menu 10A-002671 10/21/2016', '', '8.8.8.8', '10A-003079', '', '8.8.8.8', '10A-003179 10A-003178 10A-003172 10A-003171 10A-003170', ''] # Add more lines 

args=[iter(data)]*3 
collected = list(itertools.zip_longest(*args, fillvalue='')) 
print(collected) 
# [('8.8.8.8', 'Open Menu 10A-002671 10/21/2016', ''), ('8.8.8.8', '10A-003079', ''), ('8.8.8.8', '10A-003179 10A-003178 10A-003172 10A-003171 10A-003170', '')] 

此列表可以很容易地保存爲CSV。

0

你可以嘗試使用while True環和readline()這樣:

while True: 
    line1 = fiEsccb.readline() 
    if m in line1: 
     line2 = fiEsccb.readline() 
     if n in line2: 
      print m + ',' + line2 
0

您可以使用正則表達式如下生成從輸入IP texfile的數據列表,然後翻滾到CSV:

import csv,re 

ippattern = r'\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}' 
packetpattern = r'10A-\d{6}' 
data = [] 

with open(r"C:\ipinfo.txt", 'rb') as ipfile: 
    lines = ipfile.readlines() 
    for line in lines: 
     if re.search(ippattern,line): 
      ip = re.findall(ippattern,line)[0] 
      packet = re.findall(packetpattern,lines[lines.index(line)+1])[0] 
      data.append([ip,packet]) 
with open(r"C:\ipinfo_output.csv", 'wb') as ipout: 
    writer = csv.writer(ipout) 
    writer.writerows(data) 

輸出CSV:

8.8.8.8,10A-002671 
8.8.8.8,10A-002671 
8.8.8.8,10A-002671 
8.8.8.8,10A-002970 
8.8.8.8,10A-002671 

這APPR oach生成幾個重複,這是不必要的,我認爲。爲了避免這種情況,您可以使用字典,其中ip是字典密鑰,數據包是字典值。然後將此字典寫入csv文件。

或者你可以導入這個重複的CSV文件導入Excel,並通過一個命令remove duplicates在Microsoft Excel中的Data選項卡中刪除重複。

0

如果我正確理解你的問題,你必須申請IP地址爲全行的正則表達式,並在隨後的行正則表達式對票號的項目:

import re 
reIP = r'(\d{1,3}.){3}\d{1,3}(-\d{2}|slash\d{2})?' 
reTicketNr = r'10A-\d{6}' 
for line in fiEsccb: 
    line = line.strip() 
    if line == '': continue 
    mg = re.match(reIP,line) 
    if mg: 
    ip = mg.group(0) 
    else: 
    possibleTicketNrs = line.split() 
    for item in possibleTicketNrs: 
     if re.match(reTicketNr,item): 
     print(','.join([ip,item])) 

隨着

fiEsccb = ['8.8.8.8', 'Open Menu 10A-002671 10/21/2016', '', '8.8.8.8', '10A-003079', '', '8.8.8.8', '10A-003179 10A-003178 10A-003172 10A-003171 10A-003170', ''] 

你將獲得:

8.8.8.8,10A-002671 
8.8.8.8,10A-003079 
8.8.8.8,10A-003179 
8.8.8.8,10A-003178 
8.8.8.8,10A-003172 
8.8.8.8,10A-003171 
8.8.8.8,10A-003170