2016-07-27 3 views
1

'origFile'에 'readyFile'에 추가되고 쓰여질 URL 목록이 있습니다. 'readyFile'에 URL이없는 경우에만 'readyFile'에 URL을 추가하고 싶습니다.문자열 비교가 일치하지 않음

with open('bpBlacklist.txt', 'r') as origFile, open('bpBlacklistReady','r+') as readyFile : 
    for line in origFile:  
     orig_string = line.strip() 
     if orig_string in readyFile.read(): 
      None 
     else: 
      readyFile.write("'" + orig_string + "'," + '\n') 

    origFile.close()  
    readyFile.close() 

지금 당장은 전체 목록을 실행할 때마다 'readyFile'로 다시 작성합니다. if 문 밖에서 "+ str + '"확대를 시도했지만 문제는 지속됩니다.

+0

당신은'file.close 필요하지 않습니다 :

대신 파일을 통해 반복하고 모든 URL의 회원 자격을 확인 당신은 여분의 URL을 쓰기 set.difference() 기능을 사용하여 차이를 찾을 수 있습니다)'줄에 파일을 열 때. 당신이 블록을 나갈 때 그들은 닫을 것이다. – kirkpatt

+0

그'None'은'continue'로 대체해야합니다 –

답변

1

작성하여 readyFile.write(...) 다음 readyFile.read() 전화를 덮어 씁니다. 당신은 with 문 다음에 변수 우측으로 readyFile 내용을 저장해야합니다 : 예상대로

with open('bpBlacklist.txt', 'r') as origFile, open('bpBlacklistReady','r+') as readyFile : 
    readyFileContent = readyFile.read() 
+0

이것은 정확한 해결책입니다 – pproctor

0

귀하의 조건이 작동하지 않습니다 read() 방법은 문자열로 전체 파일을 반환 때문입니다. 당신은 반복 가능한 iterable 사이의 회원을 확인해야합니다. (

with open('bpBlacklist.txt', 'r') as origFile, open('bpBlacklistReady','r+') as readyFile : 
    current = set(origFile) 
    diffs = current.difference(readyFile.readlines()) 
    for url in diffs: 
     readyFile.write(url + '\n') 
+0

덕분에 여전히 전체 목록이 변경된 파일로 다시 작성됩니다 – pproctor

+0

@pproctor 정말입니까? 어쩌면 그들은 모두 다르다! – Kasramvd

+0

물론 origFile의 모든 URL은 다르지만 직접 추가하지 않으면 변경되지 않습니다. 네가 의미하는 것이 조금 혼란 스럽다. – pproctor

관련 문제