0

私は2つのことをしなければならないファイルを持っています。最初に特定のパターンをカウントし、カウントが5を超える場合は、含まれているすべての行を印刷する必要があります。

入力ファイル:

  0-  0:        2257042_7       2930711_14  
  0-  1:        2257042_8       2930711_13    
  0-  2:        2257042_9       2930711_12    
  0-  3:        2257042_10      2930711_11  
  0-  4:        2257042_11      2930711_10  
  0-  5:        2257042_13      2930711_8   
  0-  6:        2257042_14      2930711_7   
  0-  7:        2257042_15      2930711_6   
  0-  8:        2257042_16      2930711_5  
  1-  0:        2258476_3       2994500_2  
  1-  1:        2258476_4       2994500_3          
  1-  2:        2258476_5       2994500_4  
  1-  3:        2258476_6       2994500_5  
  1-  4:        2258476_7       2994500_6       
  2-  0:        2259527_1       2921847_10       
  2-  1:        2259527_2       2921847_9   
  2-  2:        2259527_3       2921847_8                                   
  2-  3:        2259527_4       2921847_7   
  2-  4:        2259527_5       2921847_6   
  2-  5:        2259527_6       2921847_5  
38-  0:        2323304_2       3043768_5   
 38-  1:        2323304_3       3043768_6                                   
 38-  2:        2323304_4       3043768_7                                    
 38-  3:        2323304_5       3043768_8                                                                     
 38-  4:        2323304_6       3043768_9                                                                      
 38-  5:        2323304_7       3043768_10                                                                     
 38-  6:        2323304_8       3043768_11                                    
 39-  0:        2323953_1       3045012_9                                   
 39-  1:        2323953_2       3045012_8                                                                     
 39-  2:        2323953_3       3045012_7                                                                    
 39-  3:        2323953_4       3045012_6                                                                    
 39-  4:        2323953_7       3045012_3        
 39-  5:        2323953_8       3045012_2         
 40-  0:        2331568_2       3042876_8         
 40-  1:        2331568_3       3042876_7        
 40-  2:        2331568_4       3042876_6         
 40-  3:        2331568_5       3042876_5        
 40-  4:        2331568_6       3042876_4         
 40-  5:        2331568_9       3042876_2         
 40-  6:        2331568_10      3042876_1        

期待される出力:

  0-  0:        2257042_7       2930711_14                                           
  0-  1:        2257042_8       2930711_13                                            
  0-  2:        2257042_9       2930711_12                                               
  0-  3:        2257042_10      2930711_11                                               
  0-  4:        2257042_11      2930711_10                                             
  0-  5:        2257042_13      2930711_8                                               
  0-  6:        2257042_14      2930711_7                                              
  0-  7:        2257042_15      2930711_6                                               
  0-  8:        2257042_16      2930711_5                                                
38-  0:        2323304_2       3043768_5                                               
 38-  1:        2323304_3       3043768_6                                              
 38-  2:        2323304_4       3043768_7                                                 
 38-  3:        2323304_5       3043768_8                                               
 38-  4:        2323304_6       3043768_9                                               
 38-  5:        2323304_7       3043768_10                                             
 38-  6:        2323304_8       3043768_11                                              
40-  0:        2331568_2       3042876_8                                                
 40-  1:        2331568_3       3042876_7                                              
 40-  2:        2331568_4       3042876_6                                               
 40-  3:        2331568_5       3042876_5                                              
 40-  4:        2331568_6       3042876_4                                                
 40-  5:        2331568_9       3042876_2                                             
 40-  6:        2331568_10      3042876_1                                               

したがって、このために、私が知らないコーディングを入れましたが、これは間違っています。期待される出力が得られません。コーディング:

import sys                                                                                        
coll_file = open (sys.argv[1]).readlines()
old_pattern = ''

for lines in coll_file:        
           pattern_count = 0                                               
           split_line = lines.split('\t')               
           pattern    = split_line[0]                                                   
           if pattern == old_pattern:
                    pattern_count = pattern_count+1
                    if pattern_count > '5': 
                             print lines.strip()  
                             old_pattern = pattern
4

3 に答える 3

0
import csv
from collections import defaultdict

d = defaultdict(list)

with open('lines.txt') as f:
   reader = csv.reader(f, delimiter='\t')
   for row in reader:
       d[row[0]].append(row)

for k,v in d.iteritems():
   if len(v) > 5:
      print(v)
于 2013-08-07T06:23:07.020 に答える
0

line_buffer次のパターンが前のパターンと異なり、前の行の数が 5 より大きい場合は、行を格納するためにバッファーを使用する必要があります。印刷後、バッファを初期化する必要があります。

パターンが古い 1 つのパターンと等しい場合、count+=1、そうでない場合はカウントを 1 に設定します。

最後に、カウントを再度確認する必要があります。5 より大きい場合は、それを出力します。

それで全部です。

import sys
coll_file = open(sys.argv[1]).readlines()
old_pattern = ''
line_buffer = []
pattern_count = 0

for lines in coll_file:
    lines = lines.rstrip('\n')
    split_line = lines.split(' ')
    pattern = split_line[0]
    if pattern == old_pattern:
        pattern_count = pattern_count + 1
        line_buffer.append(lines)
    elif pattern != old_pattern:
        old_pattern = pattern
        if pattern_count >= 5:
            print '\n'.join(line_buffer)
        line_buffer = []
        pattern_count = 1
if pattern_count >= 5:
    print '\n'.join(line_buffer)
于 2013-08-07T06:24:13.337 に答える
0
  1. intオブジェクトとオブジェクトを比較するstrことは無意味です。

    >>> 1 > '5'
    False
    >>> 10 > '5'
    False
    
  2. 次の条件は、old_pattern変更されないため、満たされることはありません。

    pattern == old_pattern
    
于 2013-08-07T05:52:21.203 に答える