2017-12-02 2 views
0

킨들에서 가져온 텍스트 파일에서 몇 줄을 지우려고합니다. 텍스트는 다음과 같습니다.가져온 텍스트 파일 (파이썬) 제거

Shall I come to you? 
Nicholls David, One Day, loc. 876-876 


Dexter looked up at the window of the flat where Emma used to live. 
Nicholls David, One Day, loc. 883-884 


I want to grab the bin bag and do a forensics 
Sophie Kinsella, I've Got Your Number, loc. 64-64 

전체 파일 길이가 더 길습니다. 이는 문서 일뿐입니다. 내 코드의 목적은 추출물 만 남아 있도록 "loc."가 기록 된 모든 행을 제거하는 것입니다. 내 목표는 빈 줄 바로 앞에있는 줄을 제거하는 것으로 볼 수도 있습니다.

내 코드는 지금까지 다음과 같이 :

f = open('clippings_export.txt','r', encoding='utf-8') 
message = f.read() 
line=message[0:400] 
f.close() 

key=["l","o","c","."," "] 


for i in range(0,len(line)-5): 
    if line[i]==key[0]: 
     if line[i+1]==key[1]: 
      if line[i + 2]==key[2]: 
       if line[i + 3]==key[3]: 
        if line[i + 4]==key[4]: 

마지막 if 정확히 각. "LOC"이 파일에있는 위치 (인덱스)를 찾습니다. 그럼에도 불구하고,이 단계가 끝나고 나면 라인에서 어떻게 돌아갈 지 알 수 없으므로 코드가 라인이 시작되는 곳을 잡아서 완전히 제거 할 수 있습니다. 나는 무엇을 다음에 할 수 있 었는가? 이 라인을 제거하는 또 다른 방법을 추천 해 주시겠습니까?

미리 감사드립니다.

답변

3

질문에 약간의 혼란이 있을지 모릅니다.

어쨌든 단순히 해당 행을 제거하려면 "loc"이 포함되어 있는지 확인해야합니다. 부분 문자열. 가장 쉬운 방법은 in operator을 사용하는 것입니다.

전체 파일을 read() 함수에서 가져 오는 대신 파일을 한 줄씩 읽습니다 (예 : readlines() function 사용). 그런 다음 키가 포함되어 있는지 확인하고 키가 있으면 생략 할 수 있습니다.

이제 결과가 문자열 목록이므로 병합하고자 할 수 있습니다 : str.join().

원하는 줄을 저장하는 데 다른 목록을 사용 했으므로 "더 많은 pythonic"filter() 또는 목록 이해 (아래에서 언급 한 비슷한 질문의 예)를 사용할 수도 있습니다. (즉, 키를 포함하는 행을 원하는 경우) Here's question about the opposite - 그런데

f = open('clippings_export.txt','r', encoding='utf-8') 
lines = f.readlines() 
f.close() 

filtered_lines = [] 
for line in lines: 
    if "loc." in line: 
     continue 
    else: 
     filtered_lines.append(line) 

result = "" 
result = result.join(filtered_lines) 

, 나는이 중복 될 줄 알았는데.

+0

안녕하세요 애드리안. 아마도 질문은 오해의 소지가 있지만 답변은 완벽하게 작동했습니다. 문제는 명령 마감일에 대해 알지 못했다는 것입니다 (방금 read()에 대해 알았습니다). 고마워요! –

+0

그 누구도 전에 대답하지 않았고 나는 첫 번째 대답을 얻을 수있었습니다. 도와 드릴 수있어서 기쁩니다! – Adrian