Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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_Loops - Fatal编程技术网

Python中同时从两行中提取信息

Python中同时从两行中提取信息,python,loops,Python,Loops,我有一个包含多行SAMfields的文件,在不同的制表符分隔的字段中包含信息和DNA序列。每一行都是唯一的样本,但每两行都是耦合的(成对的),因此我想同时从两行中提取信息 虽然我可以很容易地逐行从这些字段中提取信息,但我希望有一种同时分析这两行的方法。是否有一个循环(或一行一行地操作循环)来完成此操作?您可以将所有偶数行压缩为奇数行。因此,您可以: with open(myFile) as inputFile: for sequence in zip(inputFile[::2], in

我有一个包含多行SAMfields的文件,在不同的制表符分隔的字段中包含信息和DNA序列。每一行都是唯一的样本,但每两行都是耦合的(成对的),因此我想同时从两行中提取信息


虽然我可以很容易地逐行从这些字段中提取信息,但我希望有一种同时分析这两行的方法。是否有一个循环(或一行一行地操作循环)来完成此操作?

您可以将所有偶数行压缩为奇数行。因此,您可以:

with open(myFile) as inputFile:
    for sequence in zip(inputFile[::2], inputFile[1::2]):
        print(sequence)  # prints lines 0,1 then lines 2,3 etc.

您可以用所有奇数行压缩所有偶数行。因此,您可以:

with open(myFile) as inputFile:
    for sequence in zip(inputFile[::2], inputFile[1::2]):
        print(sequence)  # prints lines 0,1 then lines 2,3 etc.

你可以使用itertools做你想做的事。更具体地说。我想这会对你有好处,因为它对记忆很友好,你可以挖掘DNA数据

import itertools

with open(file) as f:
   for l,j in itertools.izip(f,f):
       print l,j

你可以使用itertools做你想做的事。更具体地说。我想这会对你有好处,因为它对记忆很友好,你可以挖掘DNA数据

import itertools

with open(file) as f:
   for l,j in itertools.izip(f,f):
       print l,j

更灵活的方法是使用发电机:

def line_pairs(file):
    file_iter = iter(file)
    while True:
        line1 = next(file_iter)
        line2 = next(file_iter)
        yield (line1, line2)

for line1, line2 in line_pairs(file):
    # do what you want with line1 and line2 available at the same time

现在,如果您意识到需要专门处理某些行(例如,去除空行),您可以修改生成器。

更灵活的方法是使用生成器:

def line_pairs(file):
    file_iter = iter(file)
    while True:
        line1 = next(file_iter)
        line2 = next(file_iter)
        yield (line1, line2)

for line1, line2 in line_pairs(file):
    # do what you want with line1 and line2 available at the same time

现在,如果您意识到需要专门处理某些行(例如,去除空行),您可以修改生成器。

请将您的问题详细说明一下好吗?也许可以提供一些数据和例子?请再详细说明一下你的问题好吗?也许提供一些数据和示例?不是说它不正确,只是作为一个答案,它似乎缺少任何解释添加了一些解释。它不正确,文件对象不可订阅。不是说它不正确,只是作为一个答案,它似乎缺少任何解释添加了一些解释。它不正确,文件对象不可下标。这不能处理通过line@theorifice你能说得更具体些吗?在一个测试文件中,我在每次迭代中得到2行代码,这是op所要求的。算了吧。我没有意识到在文件对象上迭代会产生行!这对我来说是个新闻。很抱歉。@Theorific是的,你不是很喜欢python吗?@Martijn没问题。如果你决定跟着它,没有其他答案出现,考虑把它标记为接受。line@theorifice你能说得更具体些吗?在一个测试文件中,我在每次迭代中得到2行代码,这是op所要求的。算了吧。我没有意识到在文件对象上迭代会产生行!这对我来说是个新闻。很抱歉。@Theorific是的,你不是很喜欢python吗?@Martijn没问题。如果你决定和它一起去,并且没有其他答案出现,考虑把它标记为接受。