Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中提取与模式匹配的两个连续行_Python - Fatal编程技术网

如何在python中提取与模式匹配的两个连续行

如何在python中提取与模式匹配的两个连续行,python,Python,我试图从test.txt中提取匹配两种不同模式的行 首先,我想提取与fbat-v1匹配的行,然后匹配p值(双面)下方的对应行 这是我尝试过的代码,但它只提取第一个匹配项 import re file = open('test.txt') for line in file: match = re.findall('^>> fbat -v1', line) if match: print line 我也试着在R中这样做,但似乎R不太适合这样做。我不熟悉

我试图从
test.txt

中提取匹配两种不同模式的行 首先,我想提取与fbat-v1匹配的行,然后匹配p值(双面)下方的对应行

这是我尝试过的代码,但它只提取第一个匹配项

import re

file = open('test.txt')
for line in file:
    match = re.findall('^>> fbat -v1', line)
    if match:
        print line
我也试着在R中这样做,但似乎R不太适合这样做。我不熟悉python,所以请有人帮我解决这个问题。 先谢谢你

test.txt:

>> fbat -v1 1:939467:A:G
trait STATUS; offset 0.150; model additive; test bi-allelic; minsize 2; min_freq 0.000; p 1.000; maxcmh 1000

Marker            afreq     fam#       weight     S-E(S)      Var(S)      Z        P
----------------------------------------------------------------------------------------

Weighted FBAT rare variant statistics for the SNPs:

W           Var(W)      Z           p-value(2-sided)
----------------------------------------------------
0.400       0.240       0.816       4.14216178e-01
----------------------------------------------------


>> fbat -v1 1:941298:C:T 1:941301:G:A 1:941310:C:T 1:941324:G:A
trait STATUS; offset 0.150; model additive; test bi-allelic; minsize 2; min_freq 0.000; p 1.000; maxcmh 1000

Marker            afreq     fam#       weight     S-E(S)      Var(S)      Z        P
----------------------------------------------------------------------------------------

Weighted FBAT rare variant statistics for the SNPs:

W           Var(W)      Z           p-value(2-sided)
----------------------------------------------------
0.333       0.444       0.500       6.17075077e-01
----------------------------------------------------
结果:

>> fbat -v1 1:939467:A:G 0.400       0.240       0.816       4.14216178e-01
>> fbat -v1 1:941298:C:T 1:941301:G:A 1:941310:C:T 1:941324:G:A 0.333       0.444       0.500       6.17075077e-01

当然,您需要处理最后一行,因为如果它与fbat-v1匹配,您将尝试访问不存在的下一行。

您可以使用正则表达式从多行中选择所需的数据。由于只有两个样本,很难知道这一个是否匹配所有情况:您的一些数据可能不像样本所显示的那样规则

对于文件中的行:,这不遵循
的一次一行模式,因为您的数据由一束行组成

file = open('test.txt')
data = file.read()
rex = re.compile(r"(>> fbat -v1.+?\n).+?p-value\(2-sided\)\n-+\n(.+?)\n-", re.DOTALL)
for header, numbers in rex.findall(data):
    print (header.rstrip(), numbers)
输出为

>> fbat -v1 1:939467:A:G 0.400       0.240       0.816       4.14216178e-01
>> fbat -v1 1:941298:C:T 1:941301:G:A 1:941310:C:T 1:941324:G:A 0.333       0.444       0.500       6.17075077e-01

我顺便注意到您正在使用Python 2。除非这是一次性的,请考虑切换到Python 3。您不应该把时间花在学习Python 2上。

如果您不想使用正则表达式,您可以使用generator,它允许您在读取大量数据(和10GB大文件)时减少RAM的使用

f=open(“input.txt”)
#您可以将f.readline()替换为string.splitlines()替换为string_to_parse.splitlines()或f.readlines()
content=(f.readlines()中的行的line.replace(“\n”,”)
结果=[]
尝试:
#如果从文件中读取,可以使用string.splitlines()替换内容
对于内容中的行:
#我们试图找到一个以>>fbat-v1开头的行
如果line.startswith(“>>fbat-v1”):
结果线=线
#跳转线条,直到找到以p值结尾的线条(双面)
而不是下一个(内容)。endswith(“p值(双面)”):
通过
#跳过一行忽略----------------------------------------------------
下一步(内容)
#我们把这一行添加到结果中
结果_行+=下一行(内容)
#最后,我们将结果添加到列表中
result.append(结果\行)
#如果有一个>>fbat-v1在之后没有p值(双面),则会发生这种情况
除停止迭代外:
打印(“>>fbat-v1”之后找不到“p值(双面)”)
#打印结果
打印(“\n”.join(结果))

我在这里使用了一个文件来包含数据(如果它是一个日志文件)

不确定我为什么会得到
TypeError:“file”对象没有属性“\uu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,我没说会的。注释说明了如何更好地处理文件对象本身。@S3DEV修饰损坏的代码没有什么意义。为什么会出现此错误:
file“”,第1行,在NameError中:未定义名称“data”
抱歉,剪切“n”粘贴错误。在
read()
调用中出现语法错误,因此
数据不存在。
>> fbat -v1 1:939467:A:G 0.400       0.240       0.816       4.14216178e-01
>> fbat -v1 1:941298:C:T 1:941301:G:A 1:941310:C:T 1:941324:G:A 0.333       0.444       0.500       6.17075077e-01