全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 悬赏大厅
5629 6
2010-12-30
悬赏 1 个论坛币 未解决
标  题: 如何用Python或者Perl抓取文本?
发信站: BBS 未名空间站 (Wed Dec 29 13:27:08 2010, 美东)

我有一个文件,想把里面的数值文本抓出来,每隔四行有一行数值:
26519        122.0663
30873        140.0737
d)=.014        
        
Obs        Mean
-----------        ------------
34811        135.384

d)=.015        
        
Obs        Mean
-----------        ------------
37928        136.9504

d)=.016        
        
Obs        Mean
-----------        ------------
39844        142.5111

d)=.017        
        
Obs        Mean
-----------        ------------
40929        145.8832

d)=.018        
        
Obs        Mean

如何用Python或者Perl把他们抓出来?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-12-30 04:55:47
推荐使用正则表达式,具体就不多说了,你可以自己看看下面这三本书,对好入座。
Regular Expression Pocket Reference
Regular Expressions Cookbook
Mastering Regular Expressions
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-3-30 15:53:56
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys

try:
    infilename = sys.argv[1]
    outfilename = sys.argv[2]
except:
    print "Usage:", sys.argv[0], "infile outfiel"
    sys.exit(1)

ifile = open( infilename, 'r')
lines = ifile.readlines()
ofile = open(outfilename, 'w')

x = []
y = []
z = []

Type = ['0','1','2','3','4','5','6','7','8','9']
# 需要把原始数据文档的前两行数字注释掉再处理

for line in lines:
    if line.startswith('d)='):          # 匹配"d)="的行处理
        xval = line.split('=')[1]
        x.append(float(xval))
    else:
        for type in Type:
            if line.startswith(type):   # 匹配开头是数字的行处理
                yval = line.split()[0]
                zval = line.split()[1]
                y.append(float(yval))
                z.append(float(zval))

ofile.write('%s %s %s\n' % ("d)=","Obs","Mean")) # 不需要可以注释掉

for i in range (0,len(x),1):
    ofile.write('%g %g %.4f\n' % (x[i],y[i],z[i]))

ifile.close()
ofile.close()

# 刚开始学python,准备用来作数据前后处理
# 正好拿这个作为练习作业了
# 由于缺少很多自动判断,正则写的也不好,所以处理前需要手动处理一下原始数据
# 使得原始数据从 第一个 "d)=" 开始,比如把头两行注释掉
# 以免头两行的数据被读入数组
# 而且需要数据对完整,否则就报错
# 运行结果:
# d)= Obs Mean
# 0.014 34811 135.3840
# 0.015 37928 136.9504
# 0.016 39844 142.5111
# 0.017 40929 145.8832
# 后面的 d)= 0.018,数据不完整,没成对,删掉才能运行通过
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-11 23:01:10
ffffffffffffffffffffffffffffffffffffff
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-2 10:30:13
这个很简单,有同样需求的同学可以联系我QQ1453724998,用正则就行了。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-1-12 19:12:02
用python的re模块,通过写正则可以抓取。如果方便,可以把文件发给我 285778735@qq.com
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群