【问题标题】:Read data from text table从文本表中读取数据
【发布时间】:2017-04-27 09:57:56
【问题描述】:

我有一张这样的桌子:

protocol        packets                bytes                 bytes/pkt
------------------------------------------------------------------------
 total         78913220 (100.00%)      47623614577 (100.00%)    603.49
 ip            76930821 ( 97.49%)      45706321977 ( 95.97%)    594.12
  tcp          45432316 ( 57.57%)      38990240707 ( 81.87%)    858.20

实际上,您可以在WIDE MAWI WorkingGroup 中找到一些示例。 我使用简单的 Python 代码获取数据,然后我想将每个项目存储在某个结构中,例如 dict

例如:

这不是一个实用的代码!这是我需要的示例代码。

import httplib2
from BeautifulSoup import BeautifulSoup, SoupStrainer
import pandas as pd

http = httplib2.Http()

status, response = http.request('http://mawi.wide.ad.jp/mawi/ditl/ditl2017/201704131545.html')

for item in BeautifulSoup(response, parseOnlyThese=SoupStrainer('pre')):
    res = item.text

pd.read_somefunction_to_read_string(res)
if pd['protocol']['ip'] > .09 * pd['protocol']['total']
    do_something

预期输出:

 [
     {'protocol' : 'total', 'packet' : 78913220, 'bytes' : 47623614577},
     {'protocol' : 'ip', 'packet' : 76930821, 'bytes' : 45706321977}
 ]

【问题讨论】:

    标签: python python-2.7 pandas beautifulsoup


    【解决方案1】:

    首先响应可以通过换行符分成几行。然后对于每一行:protocolpacketbytes 字段可以使用正则表达式提取。然后给他们附加一个字典列表(lst_dict)。最后将lst_dict 转换为pandas DataFrame。

    import httplib2
    from BeautifulSoup import BeautifulSoup, SoupStrainer
    import pandas as pd
    import re
    
    lst_dict = []
    http = httplib2.Http()
    
    status, response = http.request('http://mawi.wide.ad.jp/mawi/ditl/ditl2017/201704131545.html')
    
    
    res = BeautifulSoup(response, parseOnlyThese=SoupStrainer('pre'))
    items = res.text.split("\n")
    for item in items[2:]:
        item = item.strip()
        protocol = re.search('(\w+)\s.*', item).group(1)
        packet = re.search('\w+\s*(\w+)\s.*', item).group(1)
        byts = re.search('\w+\s*\w+\s\(.*\)\s+(\w+)\s.*', item).group(1)
        dict = {'protocol': protocol, 'packet': packet, 'bytes': byts}
        lst_dict.append(dict)
    
    df = pd.DataFrame(lst_dict)
    print df
    

    【讨论】:

      【解决方案2】:

      我尝试将数据获取并解析为 dict 列表:

      import requests
      from bs4 import BeautifulSoup, SoupStrainer
      
      r = requests.get('http://mawi.wide.ad.jp/mawi/ditl/ditl2017/201704120145.html')
      
      pre = BeautifulSoup(r.content, "html.parser", parse_only=SoupStrainer('pre'))
      entries = pre.text.split("\n")
      keys = list(filter(None, entries.pop(0).strip().split("\t")))
      entries.pop(0)
      
      rows = []
      for entry in entries:
          row = list(filter(None, entry.strip().split("   ")))
          if (len(row)):
              result = {};
              result[keys[0]] = row[0]
              result[keys[1]] = row[1]
              result[keys[2]] = row[2]
              rows.append(result)
      
      print(rows)
      

      (没用过 pandas,剩下的交给你)

      【讨论】:

      • 我用这样的东西做,但我想用熊猫做:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2011-02-08
      • 2021-11-16
      • 2015-08-05
      相关资源
      最近更新 更多