python提取数据指令内容

&& 查看话题
python 读文件 提取数据问题
假如一个txt文件中既有字符串,又有整型和浮点型数据,还有标点符号,例如:
文件a.txt内容:
asdafasd asfasd fdafd======adsa**ad
& & 3,& && &2.423
& & 4,& && &434.5
讨论一下如何编写python程序能够从该文件中获得整型和字符型数据,并将其存放在序列中。
我在网上搜了,只有一段代码:
import re&&
fp = open('c:/1.txt', 'r')&&
s = fp.readline()&&
print(s)&&
aList = re.findall('(?\d+(\.\d*)?|\.\d+)(?\d+)?',s) #使用正规表达式搜索字符串&&
print(aList)&&
for ss in aList:&&
print(ss+ss)&&
aNum = float((ss+ss))&&
print(aNum)&&
fp.close()&&
文件内容:
12.540&&56.00&&1.2e2 -1.2E2 3.0e-2 4e+3
我试过,以上代码在有逗号的时候也可以实现,当文件中有字符串时则无法实现了。其实以上可以用C++实现,只是琢磨了一天,也没用python实现,想跟大伙交流讨论一下。
你发个文件的数据格式,关键看数据用什么分割的,如果是空格,很简单的,我给你个例子
测试数据 a 222-= 3.232 20 53 53.343 adfadf
asdfasdf 234. 53=53.343 upotuit
-2 -342.2420 sf
#! /usr/bin/env python
for line in open(r'data.txt','r').readlines():
& & print 'line: ', ind
& & ind += 1
& & m = line.split(' ')
& & for item in m:
& && &&&if item.replace('.','').replace('-','').isdigit():
& && && && &if item.count('.')>0: # float point
& && && && && & print 'float: ', float(item)
& && && && &else:
& && && && && & print 'integer: ', int(item)
& && &&&else:
& && && && &print 'string: ',item
>>> ================================ RESTART ================================
string:&&a
string:&&222-=
float:&&3.232
integer:&&20
integer:&&53
float:&&53.343
string:&&adfadf
string:&&asdfasdf
float:&&234.23423
float:&&200.0
string:&&53=53.343
string:&&upotuit
integer:&&-2
float:&&-342.242
string:&&sf
>>> 你要确定文件的格式 包括字符串内容 分割符 数据类型
编程的时候按照顺序读取一行 判断是不是字符串 是则跳过该行(或转存起来)
是数字则用匹配去读进变量中去 : Originally posted by libralibra at
你发个文件的数据格式,关键看数据用什么分割的,如果是空格,很简单的,我给你个例子
测试数据 a 222-= 3.232 20 53 53.343 adfadf
asdfasdf 234. 53=53.343 upotuit
-2 -342.2420 sf
#! /us ... 你好,这行代码
m = line.split(' ')
是用空格来划分元素的。
这两行代码没看懂,能否解释一下?谢谢
& && &&&if item.replace('.','').replace('-','').isdigit():
& && && && &if item.count('.')>0 : Originally posted by zjq0415 at
你好,这行代码
m = line.split(' ')
是用空格来划分元素的。
这两行代码没看懂,能否解释一下?谢谢
& && &&&if item.replace('.','').replace('-','').isdigit():
& && && && &if item.count('.')&0... if item.replace('.','').replace('-','').isdigit():
替换完小数点(.)和负号(-)后剩下的全是数字,那就说明原来的item只有4种情况:
1.不含小数点和负号的正整数
2.含小数点不含负号的浮点数
3.不含小数点,含负号的负整数
4.包含小数点和负号的负浮点数
if item.count('.')>0
如果含有小数点,是2,4直接float()转换为浮点数,正负号自动处理
否则是1,3,直接int()转换为整型,正负号自动处理
如果除了.和-之外其他的不全是数字,那原来的item就是个字符串,直接输出 读出一行以后,先判断是否含有a到Z的字符
如果有的话,认为是字符串,跳过
如果仅仅含有数字逗号,空格tab数字点,则认为是数据
然后进行分割,这样做比较原始,没有正则表达式好 这帖子对初学者非常有用的
var cpro_id = 'u1216994';
欢迎监督和反馈:本帖内容由
提供,小木虫仅提供交流平台,不对该内容负责。欢迎协助我们监督管理,共同维护互联网健康,如果您对该内容有异议,请立即发邮件到
联系通知管理员,也可以通过QQ周知,我们的QQ号为:8835100
我们保证在1个工作日内给予处理和答复,谢谢您的监督。
小木虫,学术科研第一站,为中国学术科研研究提供免费动力
广告投放请联系QQ: &
违规贴举报删除请联系邮箱: 或者 QQ:8835100
Copyright &
eMuch.net, All Rights Reserved. 小木虫 版权所有想尝试爬下北邮人的论坛,但是看到页面的源代码都是js,几乎没有我想要的信息。
js代码是需要js引擎运行的,Python只能通过HTTP请求获取到HTML、CSS、JS原始代码而已。不知道有没有用Python编写的JS引擎,估计需求不大。我一般用、这些引擎来做浏览器抓取。直接在其中写JS代码来做DOM操控、分析,以文件方式输出结果。让Python去调用该程序,通过读文件方式获得内容。
今天偶然发现了PyV8这个东西,感觉就是你想要的。它直接搭建了一个js运行环境,这意味着你可以直接在python里面执行页面上的js代码来获取你需要的内容。参考:
使用 python 模拟浏览器行为,有一些库可以使用。例如 selenium 和 webdriver,还有一个 ghost
人生的路啊,都是自己选的页面导航:
→ 正文内容 python连接数据库操作方法
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
这篇文章主要介绍了python数据库操作常用功能使用方法:获取mysql版本、创建表、插入数据、slect获取数据等,下面看示例吧
实例1、取得MYSQL版本
代码如下:# -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:&&& #连接mysql的方法:connect('ip','user','password','dbname')&&& con = mdb.connect('localhost', 'root',&&&&&&& 'root', 'test');&&& #所有的查询,都在连接con的一个模块cursor上面运行的&&& cur = con.cursor()&&& #执行一个查询&&& cur.execute("SELECT VERSION()")&&& #取得上个查询的结果,是单个结果&&& data = cur.fetchone()&&& print "Database version : %s " % datafinally:&&& if con:&&&&&&& #无论如何,连接记得关闭&&&&&&& con.close()
执行结果:Database version : 5.5.25
实例2、创建一个表并且插入数据
代码如下:# -*- coding: UTF-8 -*-import MySQLdb as mdbimport sys#将con设定为全局连接con = mdb.connect('localhost', 'root', 'root', 'test');with con:&&& #获取连接的cursor,只有获取了cursor,我们才能进行各种操作&&& cur = con.cursor()&&& #创建一个数据表 writers(id,name)&&& cur.execute("CREATE TABLE IF NOT EXISTS \&&&&&&& Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")&&& #以下插入了5条数据&&& cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")&&& cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")&&& cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")&&& cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")&&& cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
实例3、python使用slect获取mysql的数据并遍历
代码如下:# -*- coding: UTF-8 -*-import MySQLdb as mdbimport sys#连接mysql,获取连接的对象con = mdb.connect('localhost', 'root', 'root', 'test');with con:&&& #仍然是,第一步要获取连接的cursor对象,用于执行查询&&& cur = con.cursor()&&& #类似于其他语言的query函数,execute是python中的执行查询函数&&& cur.execute("SELECT * FROM Writers")&&& #使用fetchall函数,将结果集(多维元组)存入rows里面&&& rows = cur.fetchall()&&& #依次遍历结果集,发现每个元素,就是表中的一条记录,用一个元组来显示&&& for row in rows:&&&&&&& print row
代码如下:执行结果:(1L, ‘Jack London')(2L, ‘Honore de Balzac')(3L, ‘Lion Feuchtwanger')(4L, ‘Emile Zola')(5L, ‘Truman Capote')
实例4、使用字典cursor取得结果集(可以使用表字段名字访问值)
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport sys#获得mysql查询的链接对象con = mdb.connect('localhost', 'root', 'root', 'test')with con:&&& #获取连接上的字典cursor,注意获取的方法,&&& #每一个cursor其实都是cursor的子类&&& cur = con.cursor(mdb.cursors.DictCursor)&&& #执行语句不变&&& cur.execute("SELECT * FROM Writers")&&& #获取数据方法不变&&& rows = cur.fetchall()&&& #遍历数据也不变(比上一个更直接一点)&&& for row in rows:&&&&&&& #这里,可以使用键值对的方法,由键名字来获取数据&&&&&&& print "%s %s" % (row["Id"], row["Name"])
实例5、获取单个表的字段名和信息的方法
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport sys#获取数据库的链接对象con = mdb.connect('localhost', 'root', 'root', 'test')with con:&&& #获取普通的查询cursor&&& cur = con.cursor()&&& cur.execute("SELECT * FROM Writers")&&& rows = cur.fetchall()&&& #获取连接对象的描述信息&&& desc = cur.description&&& print 'cur.description:',desc&&& #打印表头,就是字段名字&&& print "%s %3s" % (desc[0][0], desc[1][0])&&& for row in rows:&&&&&&& #打印结果&&&&&&& print "%2s %3s" % row
代码如下:运行结果: cur.description: ((‘Id', 3, 1, 11, 11, 0, 0), (‘Name', 253, 17, 25, 25, 0, 1))Id Name1 Jack London2 Honore de Balzac3 Lion Feuchtwanger4 Emile Zola5 Truman Capote
实例6、使用Prepared statements执行查询(更安全方便)
代码如下:# -*- coding: UTF-8 -*-# 来源:疯狂的蚂蚁的博客总结整理import MySQLdb as mdbimport syscon = mdb.connect('localhost', 'root', 'root', 'test')with con:&&& cur = con.cursor()&&& #我们看到,这里可以通过写一个可以组装的sql语句来进行&&& cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",&&&&&&& ("Guy de Maupasant", "4"))&&& #使用cur.rowcount获取影响了多少行&&& print "Number of rows updated: %d" % cur.rowcount结果: 代码如下:Number of rows updated: 1
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910想尝试爬下北邮人的论坛,但是看到页面的源代码都是js,几乎没有我想要的信息。
去年还真爬过这样的数据,因为赶时间,我的方法就比较丑陋了。PyQt有一个具体的库来模拟浏览器请求和行为(好像是webkit,忘记了,查一下就好。使用时就几行代码就够了),在一次运行程序中,第一次(只有第一次)的返回结果是js运行之后的代码。于是写了一个py脚本做一次访问解析,然后再写了windows脚本通过传递命令行参数循环这个py脚本,最后搞到数据。方法dirty了些,不过数据拿到了就好~
今天偶然发现了PyV8这个东西,感觉就是你想要的。它直接搭建了一个js运行环境,这意味着你可以直接在python里面执行页面上的js代码来获取你需要的内容。参考:
js代码是需要js引擎运行的,Python只能通过HTTP请求获取到HTML、CSS、JS原始代码而已。不知道有没有用Python编写的JS引擎,估计需求不大。我一般用、这些引擎来做浏览器抓取。直接在其中写JS代码来做DOM操控、分析,以文件方式输出结果。让Python去调用该程序,通过读文件方式获得内容。
要多多回答MOOC话题[Python]网络爬虫(四):浏览器伪装及抓取内容保存
上一次写了一个简陋的勉强能运行的爬虫alpha. alpha版有很多问题. 比如一个网站上不了,
爬虫却一直在等待连接返回response, 不知道超时跳过; 或者有的网站专门拦截爬虫程序,
我们的爬虫也不会伪装自己成为浏览器正规部队; 并且抓取的内容没有保存到本地, 没有什么作用.
这次我们一个个解决这些小问题.
安装一个叫做Fiddler的软件, 边学边实践, 观察浏览器是如何访问一个网站的, 如何发出请求, 如何处理响应,
如何进行跳转, 甚至如何通过登录认证. 有句老话说得好, 越会用Fiddler, 就对理论理解更深刻; 越对理论理解深刻,
Fiddler就用得越顺手. 最后我们在用爬虫去做各种各样的事情的时候, Fiddler总是最得力的助手之一.
添加超时跳过功能
首先, 我简单地将 urlop = urllib.request.urlopen(url)
&改为 urlop = urllib.request.urlopen(url, timeout =
运行后发现, 当发生超时, 程序因为exception中断. 于是我把这一句也放在try .. except 结构里,
&支持自动跳转
的时候, 爬回来一个没有什么内容的东西,
这个东西告诉我们应该跳转到 . 但是我们的爬虫并不支持自动跳转, 现在我们来加上这个功能,
让爬虫在爬
的时候能够抓取
首先我们要知道爬
的时候他返回的页面是怎么样的, 这个我们既可以用 Fiddler 看,
也可以写一个小爬虫来抓取. 这里我抓到的内容如下, 你也应该尝试一下写几行 python 来抓一抓.
看代码我们知道这是一个利用 html 的 meta 来刷新与重定向的代码, 其中的0是等待0秒后跳转, 也就是立即跳转.
这样我们再像上一次说的那样用一个正则表达式把这个url提取出来就可以爬到正确的地方去了. 其实我们上一次写的爬虫已经可以具有这个功能,
这里只是单独拿出来说明一下 http 的 meta 跳转.
伪装浏览器正规军
前面几个小内容都写的比较少. 现在详细研究一下如何让网站们把我们的Python爬虫当成正规的浏览器来访.
因为如果不这么伪装自己, 有的网站就爬不回来了. 如果看过理论方面的知识, 就知道我们是要在 GET 的时候将 User-Agent
添加到header里.
如果没有看过理论知识, 按照以下关键字搜索学习吧 :D
HTTP 报文分两种: 请求报文和响应报文
请求报文的请求行与首部行
GET, POST, HEAD, PUT, DELETE 方法
我用 IE 浏览器访问百度首页的时候, 浏览器发出去的请求报文如下:
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, **',
& & 'Accept-Language':
'en-US,q=0.8,zh-Hans-CN;q=0.5,zh-Hq=0.3',
& & 'User-Agent':
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like
oper = urllib.request.urlopen(req)
data = oper.read()
print(data.decode())
第二种方法使用了 build_opener 这个方法, 用来自定义 opener, 这种方法的好处是可以方便的拓展功能,
例如下面的代码就拓展了自动处理 Cookies 的功能.
import urllib.request
import http.cookiejar
# head: dict of header
def makeMyOpener(head = {
& & 'Connection':
'Keep-Alive',
& & 'Accept': 'text/html,
application/xhtml+xml, **
Accept-Language:
en-US,q=0.8,zh-Hans-CN;q=0.5,zh-Hq=0.3
可见我们在代码里写的东西都添加到请求报文里面了.
保存抓回来的报文
顺便说说文件操作. Python 的文件操作还是相当方便的. 我们可以讲抓回来的数据 data 以二进制形式保存,
也可以经过 decode() 处理成为字符串后以文本形式保存. 改动一下打开文件的方式就能用不同的姿势保存文件了.
下面是参考代码:
def saveFile(data):
& & save_path =
'D:\temp.out'
& & f_obj = open(save_path,
'wb') # wb 表示打开方式
& & f_obj.write(data)
& & f_obj.close()
# 这里省略爬虫代码
# 爬到的数据放到 dat 变量里
# 将 dat 变量保存到 D 盘下
saveFile(dat)
下回我们会用 Python 来爬那些需要登录之后才能看到的信息. 在那之前, 我已经对 Fiddler 稍微熟悉了.
希望一起学习的也提前安装个 Fiddler 玩一下.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 python正则表达式提取 的文章

 

随机推荐