def find_string(header,file_1,counter):
ab = re.compile(str(header))
for line in file_1:
if re.search(ab,line) !=None:
print line
counter+=1
return counter
file_1 = open("text_file_with_headers.txt",'r')
header_array = []
header_array.append("header1")
header_array.append("header2")
# ...
counter = 0
for header in header_array:
counter = find_string(header,file_1,counter)
每次我运行它时,它只搜索其中一个标题,我无法弄清楚原因。
答案 0 :(得分:3)
因为当第一个头的循环for line in file_1:
结束时,文件的指针位于文件的末尾。您必须将此指针再次移动到文件的开头,这是通过函数 seek()完成的。您必须添加搜索(0,0),就像那样
counter = 0
for header in header_array:
counter = find_string(header,file_1,counter)
f1.seek(0,0)
1) ab 是一个已编译的正则表达式,然后你可以写ab.search(line)
2)bool(None)
False ,然后您可以写if ab.search(line):
不需要!= None
3)
def find_string(header,file_1,counter):
lwh = re.compile('^.*?'+header+'.*$',re.MULTILINE)
lines_with_header = lwh.findall(file-1.read())
print ''.join(lines_with_header)
return counter + 1
甚至
def find_string(header,file_1,counter):
lwh = re.compile('^.*?'+header+'.*$',re.MULTILINE)
print ''.join(matline.group() for matline in lwh.finditer(file-1.read()) )
return counter + 1
4)
def find_string(header,file_1):
lwh = re.compile('^.*?'+header+'.*$',re.MULTILINE)
lines_with_header = lwh.findall(file-1.read())
print ''.join(lines_with_header)
file_1 = open("text_file_with_headers.txt",'r')
header_list = ["header1","header2",....]
for counter,header in header_list:
find_string(header,file_1)
file_1.seek(0,0)
counter += 1 # because counter began at 0
5)你在header_list中有多个标题遍历file_1。
您应该只运行一次,并记录每个包含列表中的一个标题的行,该列是其键应为标题的字典值之一。它会更快。
6)Python中的数组是array
答案 1 :(得分:1)
文件对象跟踪你在文件中的位置,在你经历了一次外循环之后,你就在文件的末尾,没有更多的行可供阅读。
如果我是你,我会颠倒你的循环嵌套的顺序:我将逐行遍历文件,并为每一行迭代你想要找到的字符串列表。这样,我只需要从文件中读取一行。