楼主: pertain
5665 6

【1000币酬谢】如何用Python或者Perl抓取文本? [推广有奖]

已卖:3857份资源

院士

8%

还不是VIP/贵宾

-

威望
0
论坛币
248003 个
通用积分
3495.9662
学术水平
29 点
热心指数
30 点
信用等级
19 点
经验
46596 点
帖子
1094
精华
0
在线时间
4171 小时
注册时间
2004-11-13
最后登录
2025-9-30

楼主
pertain 在职认证  发表于 2010-12-30 02:31:15 |AI写论文
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把他们抓出来?

关键词:python Perl 如何用 Erl mean 文本 酬谢 python Perl

沙发
kyya 发表于 2010-12-30 04:55:47
推荐使用正则表达式,具体就不多说了,你可以自己看看下面这三本书,对好入座。
Regular Expression Pocket Reference
Regular Expressions Cookbook
Mastering Regular Expressions
已有 1 人评分论坛币 收起 理由
dongyang198 + 3 热心帮助其他会员

总评分: 论坛币 + 3   查看全部评分

简单的说我比较有型。

藤椅
hsjianghw 发表于 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,数据不完整,没成对,删掉才能运行通过
已有 1 人评分经验 论坛币 收起 理由
dongyang198 + 20 + 100 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 100   查看全部评分

板凳
hack3x 发表于 2013-4-11 23:01:10
ffffffffffffffffffffffffffffffffffffff
中国微博网 -大学生创业网--中国网络技术-yahoo中国微博网 -大学生创业网

报纸
pohys 在职认证  发表于 2015-1-2 10:30:13
这个很简单,有同样需求的同学可以联系我QQ1453724998,用正则就行了。。

地板
i阿姆斯壮 发表于 2015-1-12 19:12:02
用python的re模块,通过写正则可以抓取。如果方便,可以把文件发给我 285778735@qq.com

7
树下千万年 发表于 2016-12-22 21:23:33
pohys 发表于 2015-1-2 10:30
这个很简单,有同样需求的同学可以联系我QQ1453724998,用正则就行了。。
请问关于python分词的问题可以请教吗?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 20:12