2017-02-09 3 views
0

나는 이것을 수행하는 방법을 찾기 위해 온라인 검색을 다 써 버렸습니다.다른 파일에 나열된 키워드와 부분 일치하는 텍스트 파일의 모든 줄을 추출하십시오.

두 개의 열과> 200 행을 가진 파일 searchfile.txt이 탭으로 구분되어 있습니다. 여기 샘플 :

A(H1N1)/SWINE/COTES-DARMOR/388/2009 X? 4.28144245 
A(H1N2)/SWINE/SCOTLAND/410440/1994 X? 7.25878836 
A(H1)/SWINE/ENGLAND/117316/1986 X? 3.305392038 
A(H1)/SWINE/ENGLAND/438207/1994 X? 7.66078717 

을 내가 부분적으로 searchfile.txt의 ID와 일치 일부 키워드와 다른 파일 keywords.txt 있습니다

ENGLAND/117316  
DARMOR/388 
438207 

을 내가 keywords.txt

의 키워드를 포함 searchfile.txt에서 모든 행을 추출 할

다른 유사한 질문의 해결책을 사용하여 시도 :

,342,699,475,351,803,210

나는이 python 스크립트가 길의 일부를 가지고 :

infile = r"/path/to/searchfile.txt" 

results = [] 
to_keep = ["ENGLAND/117316", 
      "DARMOR/388", 
      "438207"] 

with open(infile) as f: 
    f = f.readlines() 

for line in f: 
    for phrase in to_keep: 
     if phrase in line: 
      results.append(line) 
      break 

print(results) 

그리고 터미널 창에서이 출력 :

[ 
    'A(H1N1)/SWINE/COTES-DARMOR/388/2009 X?\t4.28144245\n', 
    'A(H1)/SWINE/ENGLAND/117316/1986 X?\t3.305392038\n', 
    'A(H1)/SWINE/ENGLAND/438207/1994 X?\t7.66078717\n' 
] 

A와 방법이 있나요)이 스크립트를 수정하여 keywords.txt과 같은 파일을 읽고 다른 파일에 줄을 출력 하시겠습니까? (내 파이썬 기술은 최대 없습니다)

또는

B) 나는 문제가 내 키워드가 없습니다 전체 별개의 단어가 있다는 생각이

할 ... sed, awk, grep 사용 searchfile.txt에있는 내용과 부분적으로 일치해야합니다.

도움에 감사드립니다! 감사.

+1

'keywords.txt' 처음 두 줄 끝에 공백 문자가 있습니다 .... 그래서'grep'가 작동하지 않습니다. –

+0

'grep -F -f ...'shouild work . 'sed -i 's/* $ //'file'를 사용하여 keywords.txt에서 공백을 제거하십시오. 행운을 빕니다. – shellter

+0

두 가지 모두 - sed 명령은 _sed -i '' 's/* $ //'file_이되어야했습니다. 이유는 알 수 없습니다. 하지만 필자는 파일에 공백이 없는지 확인했다. (텍스트 랭글러에서 공백을 검색하고 바꾼다.) 하지만 여전히 출력 파일은 기본적으로 전체 입력 파일입니다! 이것은 이상한 일입니다 - 그러나 python 스크립트는 문제 해결을 위해 작업했습니다. – user2662391

답변

0

이것은 매우 간단합니다. 당신이 output.txt에 출력 keywords.txtinput.txt 파일을 가지고 원하는 가정하면 :

# 1 
with open('keywords.txt', 'r') as k: 
    keywords = k.read().splitlines() 

results = [] 

#2 
with open('input.txt') as f, open('output.txt', 'w') as o: 
    for line in f: 
     if any(key in line for key in keywords): 
      o.writelines(line) 

이 목록에서 키워드 파일에 읽고, 저장 그것에서 각 라인 (# 1). 그런 다음 입력 및 출력 텍스트 파일을 열어 입력 파일을 한 줄씩 반복하고 줄 (# 2)에서 키워드를 찾으면 출력 파일에 씁니다.

+0

대단히 감사합니다. @ 애송 토루 인! 이것은 'w'로 8 행에서 'wb'를 바꿀 때 작동합니다. 파이썬 2와 3의 차이가있을 수 있습니다. – user2662391

+0

@ user2662391 OS 문제, 내 실수 일 수 있다고 생각합니다. 지금 고칠 수정, 도움이 될 수있어서 다행 :) – asongtoruin