python文本解析和拆分

时间:2017-03-05 19:10:25

标签: python parsing text split

我从使用python的网页中获取文本文件,如下所示。我抓住的数据包括我不需要的额外内容。我只需要粗体部分。我还需要将每个粗体部分彼此分开。你能帮我这么做吗。在一张图片中,红色部分也是我试图从数据中提取的部分。

[
  '\n249\nSRUS54 KFWD 051849\nRR5FWD\n:\n: 
  ALERT HOURLY ACCUMULATOR DATA\n: 
  NATIONAL WEATHER SERVICE FORT WORTH TX\n:
  **1249 PM CST SUN MAR 5 2017**\n:\n: 
  HOURLY ACCUMULATOR INFORMATION TABLE\n:\n: 
  NOTE:  ERRONEOU        S REPORTS MAY BE RECEIVED UNDER CERTAIN\n:
          WEATHER CONDITIONS\n:\n:
 **********************************************************\n:
 ID    LOCATION                  ACCUMULATOR VALUE\n:
 **********************************************************\n:
 **CITY OF DALLAS ALERT SYSTEM**
 \n**.A DCQT2 170305 C DH124216 /HGIRS 
 396.7**:
 \n\n**.A DCVT2 170305 C DH123434 /HGIRS 516.8**:
 \n\n**.A DAOT2 170305 C DH123721 /HGIRS 534.2**:\n\n**.A DDCT2 
 170305 C DH120338 /HGIRS 395.0**:\n\n**.A DAHT2 170305 C DH114758 /HGIRS 
 496.1**:\n\n\n\n']

This is an image of the data I grab from the web

import urllib
import re
htmlfile=urllib.urlopen("http://forecast.weather.gov/product.php?site=NWS&issuedby=FWD&product=RR5&format=CI&version=1&glossary=0")
htmltext=htmlfile.read()
regex='<pre class="glossaryProduct">(.+?)</pre>'
pattern=re.compile(regex,re.S)
out=re.findall(pattern, htmltext)
text=str(out)
saveFile=open('test.txt', 'w')
saveFile.write(text)
saveFile.close()
print (text)

2 个答案:

答案 0 :(得分:1)

在python3中,您可以尝试以下操作:

import urllib.request
import re
htmlfile=urllib.request.urlopen("http://forecast.weather.gov/product.php?site=NWS&issuedby=FWD&product=RR5&format=CI&version=1&glossary=0")
htmltext=htmlfile.read()
regex='<pre class="glossaryProduct">(.+?)</pre>'
pattern=re.compile(regex,re.S)
out=re.findall(pattern, htmltext.decode())

print("7'th line:", out[0].split('\n')[7])
print(out[0].split('\n')[17])

# print all the lines
for line in out[0].split('\n'):
    print(line)

答案 1 :(得分:1)

NOAA数据通常会定期格式化。最好的方法是将输入分成单独的行,然后逐行循环。

略读行,除非他们以您感兴趣的词组或关键词开头。例如:

for line in text.split('\n'):
    if any([re.match('^: [0-9]{4} [AP]M', line),   # matches : 1249 PM
            line.startswith(': CITY OF'),          # CITY OF...
            line.startswith('.A D')]):             # .A D....
    saveFile.write(line)

(您需要根据实际可能的线值修改上述基础。)