Python用re正则化模块在字符串查找特定字符串

实验需要,在一个含有几亿个字符的txt文件中查找特定的字符串,首先用re模块进行查找

 1 from time import clock
 2 import re
 3 start=clock()
 4 label_file = open("/home/ying/data/google_streetview_train_test1/label.txt")
 5 label_str = label_file.read()
 6 label_file.close()
 7 filename = "2_0_pitch_95_yaw_95_lat_41.8975137_lng_-87.6268723.jpg"
 8 start=clock()
 9 for match in re.finditer(filename, label_str):
10     s = match.start()
11     e = match.end()
12     print(s)
13     print(e)
14 end=clock()
15 print(end-start)

re.finditer(filename, label_str)可以在label_str中查找filename的位置,s=match.start()返回字符串开始的索引,e=match.end(),返回字符串结束的索引。程序运行的结果是

304091635
304091689
304096479
304096533
1.003844

耗时1s左右

同样的,由于txt文件中为一行一行的数据,可以用readlines进行遍历读取比较,程序如下

 1 from time import clock
 2 start=clock()
 3 data_label="/home/ying/data/google_streetview_train_test1/label.txt"
 4 filename = "2_0_pitch_95_yaw_95_lat_41.8975137_lng_-87.6268723.jpg"
 5 file = open(data_label)
 6 lines = file.readlines()
 7 print(len(lines))
 8 for line in lines:
 9     cls = line.split()
10     fn = cls.pop(0)
11     if fn==filename:
12        break
13 end=clock()
14 print(end-start)

运行结果如下:

1
3.335657

可见耗时有3s多,用正则化模块要快的多

另外,由于label_str中存在1.2_0_pitch_95_yaw_95_lat_41.8975137_lng_-87.6268723.jpg,所以用re模块寻找时会返回两个结果,而用逐行读取的方式则返回一个值

时间: 2024-11-05 12:26:06

Python用re正则化模块在字符串查找特定字符串的相关文章

python any和all的用法, 可以查找某些字符串是否存在

有一个长字符串, 还有一个列表, 其中有一些短字符串 查找长字符串是否包含列表中的某个字符串, 只要包含就返回True >>> x = ["aa", "bb", "cc", "dd", "ee", "ff"] >>> s = "ttcaceekktlffc" >>> any((s.find(k) != -1) fo

C#字符串根据特定字符串分割

String字符串如何按多个字符采用Split方法进行分割呢?本文提供VS2005和VS2003的实现方法,VS2005可以用下面的方法: string agentInfo = userInfo.Attribute19.ToString(); string[] myAgent = agentInfo.Split(new string[] { "$#$" }, StringSplitOptions.None); if (myAgent.Length == 3) { this.QLookU

Python中字符串查找效率比较

Python中字符串查找方式有多种,常见的有re.match/search or str.find 用一个例子来说明各种方式的效率如下: from timeit import timeit import re def find(string, text): if string.find(text) > -1: pass def re_find(string, text): if re.match(text, string): pass def best_find(string, text): i

Python的模块引用和查找路径

模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块):对于解释型的语言会更加直观些,比如PHP的.php文件,在Python中就是.py文件可以认为是一个模块.在"模块"之上有"包",主要是

python 字符串 查找 基本操作

个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268个人微信公众号(点击查看扫描关注) -- https://blog.51cto.com/11495268/2401194 1.简介 ????字符串 相关操作 较多,本文 只简单描述下 python 字符串 查找 相关的基础操作???? 2.字符串 查找 内置函数 3.实例 ????获取 指定 公司 的相关信息(公司信息 格式 都一致) ???? 3.1 字符串 格式 ## 公司名:排名:薪资-所占比

python数据结构之字符串查找两例

查找字符串中最长连续数字子串 问题描述 查找给定字符串中最长的数字字串,返回其起始下标,长度和字串.例如: input  :abc12345cd123ef234567df output:15 6 234567 实现 ''' 查找给定字符串中最长的数字字串,返回其起始下标,长度和字串.例如: input :abc12345cd123ef234567df output:15 6 234567 ''' def find_max_length_str(string): str_length = len(

2015/9/15 Python基础(12):模块和包

模块是用来组织 Python 代码的方法,而包则是用来组织模块的. 当代码量很大时,我们一般会把代码分成几个有组织的代码段,然后每个代码段之间有一定的联系.代码单之间是共享的,所以Python允许调入一个模块,允许使用其他模块的属性利用之前的工作成果,实现代码重用.那些自我包含并且有组织的代码片段就是模块(module),将其他模块中属性附加到你的模块中的操作较导入(import) 模块是逻辑上的说法,而它们在物理层是一个个独立的文件,模块的文件名就是模块的名字加拓展名.py.与其他可以导入类的

Python学习之String模块详解

本文和大家分享的主要是python 中String 模块相关内容,一起来看看吧,希望对大家 学习python有所帮助. String 模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 str.capitalize() 把字符串的首字母大写 str.center(width) 将原字符串用空格填充成一个长度为 width 的字符串,原字符串内容居中 str.count(s) 返回字符串 s 在 str 中出现的次数 str.decode(encoding='

python中常用的模块的总结

1. 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件.(例如:文件名:test.py,对应的模块名:test) 包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py的文件) b.导入方法 import module_name import module_1的本质:是将module_1解释了一遍 也就是将module_1中的所有代码复制给了module_1 from module_n