2015-01-06 4 views
-2

8 개의 열이있는 텍스트 파일이 있습니다. 첫 번째 ID는 ID이고 여덟 번째 ID는 유형입니다. 첫 번째 열에는 ID마다 반복되는 행이 많이 있지만 8 번째 열에는 ID 당 여러 유형이 있고 한 유형은 H이고 ID 당 하나의 H 만 있습니다.파이썬의 파일에서 여분의 행을 제거하십시오.

ID type 
E0 B 
E0 H 
E0 S 
B4 B 
B4 H 

ID 당 단 하나의 행 (8 열에 H가있는 행만)이있는 다른 파일을 만들고 싶습니다. 이 예는 다음과 같이 될 것이다 :

파이썬 2.7.3에 대한 inspectorG4dget 그냥 업데이트 솔루션
ID type 
E0 H 
B4 H 
+0

어딘가에 갇혀 있습니까? –

+0

어떤 파일입니까? 쉼표로 구분되어 있으며, 탭으로 구분되어 있습니까? ...? ['csv'] (https://docs.python.org/3/library/csv.html) 모듈을 살펴 보거나 혹독한 작업을하고 있다면 ['pandas'] (http://pandas.pydata.org/). – senshin

답변

0

:
IDtype\t

코드에 의해 분리되어 입력 csv 파일에 두 개의 열을 고려

import csv 

with open('/home/vivek/Desktop/input.csv', 'rb') as infile, open('/home/vivek/Desktop/output.csv', 'wb') as outfile: 
    reader = csv.reader(infile, delimiter='\t') 
    writer = csv.writer(outfile, delimiter='\t') 
    reader_row = next(reader) 
    writer.writerow([reader_row[0], reader_row[1]]) 
    for row in reader: 
     if row[1]=="H": 
      writer.writerow(row) 

출력 :

ID  type 
E0  H 
B4  H 

2.6.6을 확인하십시오. 내 컴퓨터에 Python 2.7.3이 있기 때문에 Python 2.6.6의 코드를 테스트하지 않았습니다.

with open('/home/vivek/Desktop/input.csv', 'rb') as infile: 
    with open('/home/vivek/Desktop/output.csv', 'wb') as outfile: 
     reader = csv.reader(infile, delimiter='\t') 
     writer = csv.writer(outfile, delimiter='\t') 
     reader_row = next(reader) 
     writer.writerow([reader_row[0], reader_row[1]]) 
     for row in reader: 
      if row[1]=="H": 
       writer.writerow(row) 
+1

OP는 [Python 2.6 사용] (http://stackoverflow.com/questions/27805235/remove-extra-rows-in-a-file-in-python#comment44020081_27805352)이므로 중첩 된' 여기에 성명서가있다. –

+0

@AshwiniChaudhary : 예, 맞습니다. 사무실에서 우리가'python 2.6'을 사용하고있는 중첩 된'with' 문을 사용했습니다. –

+0

구문 오류가 있습니다 : open ('semi_final_mergedwithGTF1.txt', 'rb') infile, open (' sem_final_mergedwithGTF1_2.txt ','wb ')을 출력 파일로 사용합니다 : – ali

0

파일을 가정하면 단순히 공간/탭이 열을 구분 텍스트 파일이며, '유형'이 포함 된 열은 행의 마지막에 적합한 :

with open('input.txt', 'r') as input_file: 
    input_lines = input_file.readlines() 

# Take the header line, and all the subsequent lines whose last character is 'H' 
output_lines = input_lines[:1] + [line for line in input_lines if line[-2] == 'H'] 

output_string = ''.join(output_lines) 
with open('output.txt', 'w') as output_file: 
    output_file.write(output_string) 

위의 코드가 있다고 가정 'type'열은 단일 문자 유형 코드 바로 다음에서 끝납니다.

output_lines = input_lines[:1] + [line for line in input_lines if line.split()[-1] == 'H'] 

편집 : 당신이 'AH'등처럼 보일 수 있습니다 멀티 문자 형식 코드를 가질 수 있다면이 데이터를 후 공백, 또는 수있는 경우에, 아래에 주석 아래 행을 대체 파일이 거대하고 메모리에 모두로드하고 조작하고 싶지 않은 경우 느리게 평가되는 생성자 표현식을 사용할 수 있습니다.

with open('input.txt', 'r') as input_file: 
    output_lines = (line for i, line in enumerate(input_lines) 
        if line[-2] == 'H' or i == 0) 
    with open('output.txt', 'w') as output_file: 
     for line in output_lines: 
      output_file.write(line)