나는이 형식의 파일로 일하고 있어요 : 당신이 볼 수 있듯이패턴을 기반으로 문자열에서 중복 문자열을 제거 할 수있는 방법이 있습니까?
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22491.xml;spectrum=1074 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=2950 true
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=1876 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3479 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=473 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=473 true
, 모든 SPEC 라인이 다른 문자열 스펙트럼의 번호가 반복되는 두 가지를 제외하고. 내가하고 싶은 것은 =Cluster=
패턴 사이의 모든 정보를 가져 와서 스펙트럼 값이 반복되는 라인이 있는지 확인하는 것입니다. 반복되는 여러 행이있는 경우 하나만 제외하고 모두 제거합니다.
출력 파일은 다음과 같아야 I는 itertools 모듈로부터 groupby
를 사용 하였다
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22491.xml;spectrum=1074 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=2950 true
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=1876 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3479 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=473 true
. 내 입력 파일을 f_input.txt라고하고 출력 파일의 이름을 new_file.txt라고 가정하지만이 스크립트는 SPEC이라는 단어도 제거합니다 ... 그리고이 작업을 수행하지 않기 위해 무엇을 변경할 수 있는지 모르겠습니다. .
from itertools import groupby
data = (k.rstrip().split("=Cluster=") for k in open("f_input.txt", 'r'))
final = list(k for k,_ in groupby(list(data)))
with open("new_file.txt", 'a') as f:
for k in final:
if k == ['','']:
f.write("=Cluster=\n")
elif k == ['']:
f.write("\n\n")
else:
f.write("{}\n".join(k))
편집 : 새 조건부. 경우에 따라 회선 번호의 일부가 변경 될 수 있습니다. 예를 들어
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=1876 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3479 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
SPEC PRD000682;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
마지막 줄에서 PRD 번호 부분이 변경되었습니다. 한 가지 해결책은 스펙트럼 번호를 확인하고 반복적 인 스펙트럼을 기반으로 한 라인을 제거하는 것입니다.
이
는 해결책이 될 것입니다 :=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=1876 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3479 true
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22498.xml;spectrum=3785 true
당신이 당신의 코드가 작동하는 어떤 코드를 작동 여부를 왜 묻는거야? –
i [2] 또는 i [3]과 같은 다른 줄에서 i [1] 동안 i = file.read(). split ('\ n'), 전체 파일을 반복하고 줄 단위로 검사 해 볼 수 있습니다. 그런 다음 i를 삭제하고 전체 분할 문자열에 대해이 작업을 하나씩 수행하십시오. 하지만 그래 코드가 많을거야. 좋은 해결책이있을 것입니다. –
코드가 제대로 작동하고 아무 문제가 보이지 않습니다. –