从文本选项卡读取数据

2024-10-02 12:23:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的桌子:

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。在

例如:

It's not a practical code! It's a semi code just for example of that I need.

^{pr2}$

预期产量:

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

Tags: ip示例bytespacketcodeitprotocoltcp
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)

(不用熊猫,剩下的留给你)

首先可以按换行符拆分响应行。然后对于每一行:protocolpacket和{}字段可以使用regex提取。然后附加一个dict列表(lst_dict)。最后将lst_dict转换为pandas数据帧。

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

相关问题 更多 >

    热门问题