python如何查找n行里的某一整行字符

假如a.txt的开始和结尾都不知道有多少行,如何查找到并提取字符串"d7dhsjw8eieew323ew"
a.txt:
....
South Dakota is a state located in the Midwestern region of the United States:
d7dhsjw8eieew323ew

SD stock chart on Yahoo! Finance. Change the date range.
...
字符串"d7dhsjw8eieew323ew"每次都不一样

那只能说:
如果你确定,一定,以及肯定:
d7dhsjw8eieew323ew
前面那行的内容就是:
South Dakota is a state located in the Midwestern region of the United States:
和后面那行内容就是:
SD stock chart on Yahoo! Finance. Change the date range.

那么,是可以直接通过写出正则表达式:
foundYourWant. = re.search("South Dakota is a state located in the Midwestern region of the United States:\s+(?P<contentYourWant>\S+)\s+SD stock chart on Yahoo! Finance. Change the date range", inputWholeStr);
contentYourWant = foundYourWant.group("contentYourWant");
print "contentYourWant=",contentYourWant;
去获得你要的内容的。

如果前后两行内容不固定,那么就要找到其他有规律的地方,然后根据不同的规律,写出不同的正则表达式,也是可以获得对应内容的。

如果没有规律,则就没办法了。

关于正则,不了解的可以推荐你去看:
【教程】详解Python正则表达式

(此处不给贴地址,请自己用google搜帖子标题,就可以找到帖子地址了)来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-30
用grep岂不是更简单:
grep -e d7dhsjw8eieew323ew a.txt
如果要得到d7dhsjw8eieew323ew前后的context:
grep -C 5 -e d7dhsjw8eieew323ew a.txt

grep是专干这件事的。python可以直接subprocess调用grep.

>>python如何查找n行里的某一整行字符

>>查找到并提取字符串"d7dhsjw8eieew323ew"
提取具体是想得到什么?是出现次数,还是出现的行号,还是别的信息?不同需求有多种写法。追问

想提取...f the United States:到SD stock chart o...之间的字符串"d7dhsjw8eieew323ew",但字符串"d7dhsjw8eieew323ew"每次都不一样的,行号也不确定,用grep太麻烦吧。

追答

以上为范例。这个subprocess.call默认是直接显示grep运行结果,如果想处理grep的结果,可以用subprocess.check_output

本回答被提问者和网友采纳
第2个回答  2012-12-05
文本一行一行的读,然后读到包含字符串"d7dhsjw8eieew323ew" 就可以打印出你需要的信息了,比如行号,这一行有哪些数据,上下文什么的。

简单的代码

task_string = "d7dhsjw8eieew323ew"

file_handle = open('a.txt','w')
while True:
every_line = file_handle.readline()

if every_line:

if task_string in every_line:
print "ok,wo found it!",#检查是否含有目标string,如果想得到比如位置信息,用str.find()方法

elsse:

break

file_handle.close()

这样就ok啦追问

抱歉,我没阐述清楚,字符串"d7dhsjw8eieew323ew"是变量,每次都不一样,这方法就不行了吧?

追答

将task_string传参进去不就行了?

import sys
task_string = sys.argv[1]

第3个回答  2012-12-05
又试了一次,发布正则,又被系统屏蔽了,且不能继续发布了。。。。

把能发布的先发布你看看:

contentYourWant = foundYourWant.group("contentYourWant");
print "contentYourWant=",contentYourWant;
去获得你要的内容的。

如果前后两行内容不固定,那么就要找到其他有规律的地方,然后根据不同的规律,写出不同的正则表达式,也是可以获得对应内容的。

如果没有规律,则就没办法了。

关于正则,不了解的可以推荐你去看:
【教程】详解Python正则表达式

(此处不给贴地址,请自己用google搜帖子标题,就可以找到帖子地址了)

剩下那句最关键的,你自己发我消息,看看消息聊天里面,能否发布。
(截图需要另外审核,而且估计也通不过的)追问

消息发了,你写的这句我看不懂啊

追答

已经通过消息,回复你了,包括那句最关键的代码。

另外,顺便:
曰 拟 嘛 柏 渡,正常的正则表达式,都误判,都不给发布。而且还无法重新修改。拷 !!

第4个回答  2012-12-05
写成一个函数即可。方法很多,可以用readline实现这个函数:
def searchLine(fileName, keyLine):
f = open(fileName, 'r')
while True:
line = f.readline()
if not line:
break
if line.rstrip() == keyLine:
print("found!");
break
f.close()

searchLine("k.txt", "d7dhsjw8eieew323ew")

也可以用read读入然后find 字符串 + os.linesep
相似回答