-
素胚勾勒不出你
使用生成器,您可以定义一个惰性读取器,该读取器每次都会生成4个值的列表。您可以如下所述耗尽或延迟迭代生成器。import csvfrom io import StringIOmystr = StringIO("""1 @M98903933932 ATCTGTAAAA3 +4 FG%@ATAAAA5 @M98903933946 ATGTCTATCC7 +8 AA%$$983089""")def gen(): # replace mystr with open('file.csv', 'r') with mystr as fin: reader = csv.reader(fin, delimiter=' ', skipinitialspace=True) res = [] for line in reader: res.append(line[1]) if len(res) == 4: yield res res = []用尽发电机:lines = list(gen())print(lines)[['@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA'], ['@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089']]迭代生成器:for line in gen(): print(line)['@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA']['@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089']
-
MMMHUHU
fastq格式易于解析,您可以在行的开头开始检查“ @”。那就是你的序列号。然后,您可以简单地追加接下来的3行,然后重新开始。如果质量得分行也以“ @”开头,则可能会出现一种“罕见”的问题情况。但是,即使这种情况也很容易发现,因为质量得分行始终位于“ +”行之后。
-
开心每一天1111
如果您只想将其分成4个,则可以使用:In []:with open('your_file') as f: result = list(zip(*[map(str.strip, f)]*4)) # Assumes Py3+ use iter(map(...)) in Py2resultOut[]:[('@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA'), ('@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089')]为每个变量创建变量的想法通常没有多大意义,但dict如果第一行包含您要使用的ID,则可能有用:In []:with open('your_file') as f: result = {head: tail for head, *tail in zip(*[map(str.strip, f)]*4)}resultOut[]:{'@M9890393393': ['ATCTGTAAAA', '+', 'FG%@ATAAAA'], '@M9890393394': ['ATGTCTATCC', '+', 'AA%$$983089']}抱歉,假设为示例添加了行号,而不是数据集的一部分。您可以将替换为zip()以下以删除数字(从@jpp的答案中借用):from operator import itemgetterzip(*[map(itemgetter(1), csv.reader(f, delimiter=' ', skipinitialspace=True))]*4)