2014-10-11 2 views
0

나는 파일 1의 내용을 읽는 스크립트를 작성하려고 시도하고 있습니다. & "특정 문자열"(토끼)을 목록의 요소 반복적으로 for 루프를 사용하여 프로그램의 앞 부분에서 작성한 내용을 새 파일 (file2)에 작성합니다.목록의 요소를 검색하여 파이썬을 사용하여 새 파일에 반복적으로 문자열로 바꿈

아래 코드에서 "new_list"는 file1의 내용으로 만든 목록입니다. 그래서 여기에서 직면하고있는 문제는 for 루프를 사용하면서 file1의 모든 내용이 file2에 여러 번 (목록의 요소 수) 기록된다는 것입니다. 그러나 "토끼"문자열/줄을 목록 요소 (반복적으로 다른 줄/문자열을 건드리지 않고)로 바꾸는 데 관심이 있습니다. & newfile/file2에 쓰십시오. 누구든지 올바른 해결책을 찾기 위해 여기 나를 도울 수 있습니까?

file1 = open(filename, 'r') 
file2 = open('newfile', 'r+') 
for line in file1: 
for s in new_list: 
     animal = line.replace('rabbit', s) 
     file2.write(animal) 
file1.close() 
file2.close() 
+0

원하는 작업이 명확하지 않습니다. 'new_list = [ 'cat', 'dog', 'horse']'라고합시다. file1에있는 'rabbit'을 'cat dog horse'로 대체하고 싶습니까? ** OR ** '토끼'의 첫 등장을 '고양이'로 대체 하시겠습니까? 2 번째 '토끼'는 '개'로 대체됩니다. 제 3의 '토끼'는 '말'로 대체됩니까? 또는 다른 것...? –

답변

-1

그것의 당신의 루프 순서로 변경하기 때문에 :

for s in new_list: 
    for line in file1: 
    try: 
     line = line.replace('rabbit', s) 
     file2.write(line) 
    except: 
     continue 
+0

나는 위에서 언급 한 것을 정확히 시도했다. 그러나 출력은 거의 이상하지 않다. 기본적으로 목록의 첫 번째 요소 만 "토끼"로 대체되고 요소의 재설정은 무시된다. 그리고 파일의 절반을 구문 분석 한 후에 파일의 내용을 여러 번 작성하기 시작했습니다. (목록의 요소 수) – user3029521

+1

이것은 완전히 잘못되었습니다 –

0

당신은 너무 거기에만 라인들 rabbit가 나타납니다 변경됩니다 교체, 목록의 내용을 작성하는 str.join을 사용할 수 있습니다 try/except

with open(filename, 'r') as file1,open('newfile', 'w') as file2: 
    for line in file1: 
     line = line.replace('rabbit', " ".join(new_list)) 
     file2.write(line) 
+0

입력 내용이 유용하지만 목록의 요소를 다음 줄 (& 등)에 쓰려고합니다. 같은 줄에 참여하지 않습니다. – user3029521

+0

'line.replace ('rabbit', s)'를 사용한다면'같은 줄에 어떻게 쓰지 않을 래? –

관련 문제