2017-05-15 144 views
-2

我有一个文本文件,如例子: 小例子:如何修改文本文件在python


@M00872:361:000000000-D2GK2:1:1101:16003:1351 1:N:0:1 
ATCCGGCTCGGAGGA 
+ 
1AA?ADDDADDAGGG 
@M00872:361:000000000-D2GK2:1:1101:15326:1352 1:N:0:1 
GCGCAGCGGAAGCGTGCTGGG 
+ 
CCCCBCDCCCCCGGEGGGGGG 
@M00872:361:000000000-D2GK2:1:1101:16217:1352 1:N:0:1 

+ 

,你看行@后的字符序列。每4行也与一个ID相关。在某些情况下,@之后的行是空的。如果是这种情况,我想删除所有4 线下的类似ID。也是@的行是每个ID的第一行。

结果小例子

@M00872:361:000000000-D2GK2:1:1101:16003:1351 1:N:0:1 
ATCCGGCTCGGAGGA 
+ 
1AA?ADDDADDAGGG 
@M00872:361:000000000-D2GK2:1:1101:15326:1352 1:N:0:1 
GCGCAGCGGAAGCGTGCTGGG 
+ 
CCCCBCDCCCCCGGEGGGGGG 
+0

和详细的什么你有问题吗? – Julien

+1

我投票结束这个问题作为题外话,因为它要求解决方案代码而不是任何问题的解决方案。 – Abhineet

+0

我会感激兄弟。 – ARM

回答

0

使用fileinput模块(修改代替文件)的溶液:

import fileinput 

with fileinput.input(files="file.txt", inplace=True, backup="file.bak") as f: 
    for l in f: 
     if l.strip().startswith("@"): 
      c = 2 
      next_line = f.readline().strip() # reading next line (line afer `@` line) 
      if not next_line: # if next line is empty 
       while c:  # skip rest 2 lines 
        c -= 1 
        try: 
         next(f) 
        except StopIteration: 
         break 
      else: 
       # printing valid 4 lines 
       print(l.strip()) 
       print(next_line.strip()) 
       while c: 
        c -= 1 
        try: 
         print(next(f).strip()) 
        except StopIteration: 
         break 

产生的文件内容:

@M00872:361:000000000-D2GK2:1:1101:16003:1351 1:N:0:1 
ATCCGGCTCGGAGGA 
+ 
1AA?ADDDADDAGGG 
@M00872:361:000000000-D2GK2:1:1101:15326:1352 1:N:0:1 
GCGCAGCGGAAGCGTGCTGGG 
+ 
CCCCBCDCCCCCGGEGGGGGG