从Python上的.TXT文件解析IP地址

时间:2016-03-10 23:49:33

标签: python parsing slice

所以我试图从.txt获取所有IP地址并将它们打印在一个新的文本文件中,每行一个在Python上

文字看起来像这样

  1    <1 ms    <1 ms    <1 ms  192.168.0.1  
  2    47 ms    14 ms    27 ms  cpe-67-254-0-1.nycap.res.rr.com [67.254.0.1]  
  3    30 ms    29 ms    21 ms  g3-27.glvlny09-rtr001.albany.rr.com  [24.29.45.249]  
  4    26 ms    12 ms    11 ms  24.58.33.254  
  5    19 ms    19 ms    19 ms  be26.rochnyei01r.northeast.rr.com [24.58.32.52]  
  6    33 ms    35 ms    35 ms  bu-ether45.chcgildt87w-bcr00.tbone.rr.com [107.14.19.106]  
  7    31 ms    30 ms    31 ms  0.ae1.pr1.chi10.tbone.rr.com [107.14.17.194]  
  8    32 ms    30 ms    44 ms  216.1.94.65  
  9    39 ms    38 ms    40 ms  207.88.13.128.ptr.us.xo.net [207.88.13.128]  
 10    38 ms    43 ms    37 ms  207.88.12.167.ptr.us.xo.net [207.88.12.167]  
 11    36 ms    39 ms    37 ms  207.88.14.181.ptr.us.xo.net [207.88.14.181]  
 12   176 ms   153 ms   147 ms  209.48.42.54  
 13    43 ms    43 ms    43 ms  216.239.46.248  
 14    43 ms    44 ms    46 ms  72.14.236.98  
 15    51 ms    48 ms    50 ms  72.14.232.73  
 16    60 ms    60 ms    58 ms  216.239.47.39  
 17    67 ms    75 ms    69 ms  216.239.59.82  
 18   100 ms    97 ms    98 ms  216.239.41.138  
 19    99 ms    98 ms   100 ms  64.233.174.191  
 20   101 ms   100 ms    99 ms  209.85.241.73  
 21   100 ms    98 ms    99 ms  lax17s04-in-f14.1e100.net [216.58.219.46] 

我被告知使用拼接,但是我已经写过一些代码大约4次似乎没有任何效果,类似的问题在这里,但我无法让它们工作

任何方向感都会有所帮助!

这是我到目前为止所拥有的

file = open('ipaddr.txt', 'r')
        ips = []
        for text in file.readlines():
            text = text.rstrip()
            found = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',text)
            if regex:
                ips.extend(found)

2 个答案:

答案 0 :(得分:2)

在你的情况下,IP地址似乎总是在最后一列,所以这应该足够了:

with open('file.txt', 'r') as f:
    for line in f:
        cols = line.split() # split line at whitespace
        ip = cols[-1] # get last column
        ip = ip.strip('[]') # remove brackets
        print(ip) # print the IP address

如果确实需要使用拼接,可以使用last_part = line[32:]获取包含域名和IP地址的部分。然后,您需要检查此部分中是否有括号(或空格)。如果没有,请打印last_part,否则请使用.split().strip().index()并拼接以获取括号之间的部分并将其打印出来。

答案 1 :(得分:0)

使用正则表达式:

import re 

self.proxy_list = []
for line in open(file, "r+").readlines():
      pattern = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{2,5})') `enter 
      self.proxy_list.append(pattern.search(line)[0])