打印完整序列,而不仅仅是第一行 |蟒蛇 3.3 |从特定行到结尾 (") 打印



我正在尝试从由新行(''(分隔的大型.txt文件中提取多个(50-100(序列。序列有几行长,但并不总是相同的长度,所以我不能只打印 x-y 行。序列以 " 结尾,下一行总是以相同的单词开头,所以也许这可以用作关键字。

我正在使用python 3.3

编写

这是我到目前为止所拥有的:

searchfile = open('filename.txt' , 'r')
cache = [] 
for line in searchfile:
    cache.append(line)
for line in range(len(cache)):
    if "keyword1" in cache[line].lower():
        print(cache[line+5])

这会拉出起始行(始终在关键字行下方 5 行(,但它只拉出这一行。

如何打印整个序列?

谢谢你的帮助。

编辑 1:

电流输出 = ABCDCECCECECE ...

期望的输出 = ABCBDBEBSOSO ...

             ABCBDBDBDBDD ...
             continued until " or new line

编辑 2

文本文件如下所示:

Name (keyword):
Date
Address1
Address2
Sex
Response"................................" 
Y/N

"和"之间的顺序是我需要的

TL;DR - 当结束 = 关键字时,如何从行 + 5 打印到结尾

不确定我是否理解您的序列数据,但如果您正在搜索每个"关键字",那么下一个" char"那么以下内容应该可以工作:

keyword_pos =[]
endseq_pos = []
for line in range(len(cache)):
    if 'keyword1' in cache[line].lower():
        keyword_pos.append(line)
    if '"' in cache[line]:
        endseq_pos.append(line)
for key in keyword_pos:
    for endseq in endseq_pos:
        if endseq > key:
            print(cache[key:endseq])
            break

这简单地编译所有关键字和 " 字符的所有位置的列表,然后匹配两者并打印两者之间的所有行。

希望有帮助。

我同意Frystacky@Michal,正则表达式是前进的方向。 但是,正如我现在所理解的问题,我们需要两次搜索,一次搜索"关键字",然后再次搜索 5 行,以找到"序列">

这应该有效,但可能需要调整正则表达式:

import re
with open('yourfile.txt') as f:
    lines = f.readlines()
for i,line in enumerate(lines):
    #first search for keyword
    key_match = re.search(r'((keyword)',line)
    if key_match:
        #if successful search 5 lines on for the string between the quotation marks
        seq_match = re.search(r'"([A-Z]*)"',lines[i+5])
        if seq_match:
            print(key_match.group(1) +' '+ seq_match.group(1))

1这可以用正则表达式简单地完成

import re
lines = 'Name (keyword):','Date','Address1','Address2','Sex','Response"................................" '
for line in lines:
    match = re.search('.*?"(:?.*?)"?',line)
    if match:
        print(match.group(1))

最终,为了使用此示例代码,我们将从数据集中lines = f.readlines()。重要的是要注意,我们只捕获"和另一个"之间的事物,如果最后没有"标记,我们将错过这些数据,但考虑这一点并不太困难。

最新更新