2014-11-30 2 views
0

그래서 문제를 해결하는 데 어려움이 있습니다. 저는 Python을 처음 사용하기 때문에이 작업을 수행하는 방법을 찾지 못하는 것 같습니다. 내가하려는 것은 파일의 모든 라인을 반복하고 각 라인에 대해 여러 개의 고유 한 규칙을 일치시키고 전체 라인을 사용자 컨텐츠로 대체하는 것입니다. 나는 여러 가지 방법을 시도했지만 둘 중 누구도 필요하지 않습니다.Python 검색 및 바꾸기 라인

print ("File to perform check on:") 

fileToSearch = input("> ") 

for line in fileinput.input(fileToSearch, inplace=True): 

    if 'foo' in line : 

     if 'footimestwo' in line : 

      sys.__stdout__.write('Wrong Answer. Try again:\n') 

      textToReplace = input("") 

      print(line.replace(line, textToReplace), end='') 

이렇게하면 줄을 사용자 입력으로 바꿉니다. 그러나 줄을 바꾸지 않습니다. 파일을 새로운 줄로 바꿉니다.

print ("File to perform check on:") 

fileToSearch = input("> ") 

fin = open(fileToSearch, 'r') 

fout = open("newFile.txt", 'w') 

for line in fin: 

    if 'foo' in line : 

     if 'rom' in line : 

      print ('Wrong Answer. Try again:') 

      textToReplace = input("> ") 

      fout.write(textToReplace+'\n') 

     else: 

      fout.write(line) 
    else: 

     fout.write(line) 

for line in fin: 

    if 'ram' in line : 

     if 'foo' in line : 

      print ('Wrong Answer. Try again:') 

      textToReplace = input("> ") 

      fout.write(textToReplace+'\n') 

     else: 

      fout.write(line) 

    else: 

     fout.write(line) 

fin.close() 

fout.close() 

이 새로운 파일의 변경을하고 첫 번째 문에 대한 라인의 나머지의 상태를 유지하지만 이후 문을 실행하지 않습니다 내가 노력

또 다른 방법이 있었다. 어떤 아이디어?

+3

1 문장으로 요약 하시겠습니까? – smushi

+0

파일의 각 줄을 검색하여 여러 개의 고유 한 기준에 일치 시키려하고 일치하는 경우 사용자가 줄을 변경하고 줄을 사용자 입력으로 바꾸고 다른 줄은 모두 지우도록 요청합니다 변경되었습니다. – JoeFin

+0

ACL에서 보안 검사를 수행하는 데 사용하려고합니다. – JoeFin

답변

0

첫 번째 코드 스 니펫과 관련하여 if 'footimestwo' in line: 또는 if 'foo' in line :에 대해 else 조건이 없으므로 사용자에게 수정을 요청하는 행만 출력합니다.

smallFile = open('path/to/a/small/file.txt') 
lines = smallFile.readlines() 
for i in range(0, len(lines)): 
    #do things, but replace lines by doing: 
    lines[i] = newStuffForLine 

Elsewise, 당신은 파일의 커서를 다시 설정해야합니다 :

작은 파일을, 그냥 메모리에있는 파일의 라인을 저장하는 것이 가장 좋은 선택이 될 것입니다, 코드의 두 번째 조각에 대해서는

이 두 번째 예에서는 중간 파일을 사용하여이 회신의 설명에서 설명한 동일한 줄 집합을 편집하는 문제를 방지합니다.

+0

코드의 두 번째 스 니펫에서는 두 가지 변경을 시도했지만 줄이 smallFile.readlines() 또는 bigFile.seek (0) 인 새 출력 파일에 같은 줄을 복사하는 작업을 계속했습니다. 나는 그것이 내가 가지고있는 else 문장에서 fout.write (라인) 때문이라고 생각한다. 나는 계속하기 위해 그것을 바 꾸었지만 새로운 파일에 복사 한 새로운 줄이 아니라 사용자 입력에 의해 변경된 기존 파일의 기존 줄을 복사했기 때문에 작동하지 않았습니다. – JoeFin

+0

여전히 두 번째 코드 조각을 얻을 수는 없지만 sys.stdout.write (line)을 사용하여 첫 번째 코드 조각에 else 문을 추가하면 의도 한대로 작동하는 것처럼 보입니다. 도와 주신 모든 분들께 감사드립니다. – JoeFin

+0

아, 네가 다른 파일에 변경 사항을 출력하고 있다는 것을 알 수 있습니다. 이 문제를 해결하기 위해 내 대답을 업데이트했습니다. –