파일을 한 줄씩 구문 분석하고 해당 줄을 지나는 동안 해당 줄을 편집 할 수 있습니까?파일에서 행을 수정할 수 있습니까?
답변
파일을 한 줄씩 구문 분석하고 해당 줄을 통과하면서 해당 줄을 편집 할 수 있습니까?
백업 파일을 사용하여 stdlib의 fileinput
module처럼 시뮬레이션 할 수 있습니다.
#!/usr/bin/env python
# grep_some_condition.py
import fileinput
for line in fileinput.input(inplace=True, backup='.bak'):
if some_condition(line):
print line, # this goes to the current file
예 :
$ python grep_some_condition.py first_file.txt second_file.txt
완료
first_file.txt
에
및 second_file.txt
파일이 포함됩니다 여기
stdin
에 주어진 파일에서
some_condition
을 만족하지 않는 행을 제거하는 예제 스크립트입니다 술어
some_condition()
을 만족시키는 행만.
실제로 파일의 중간에 쓰지 않는 메서드는 현명합니다. 왜냐하면 수정을 원자 적으로 쉽게 할 수 있기 때문입니다 (즉, 프로그램이 중단되면 파일이 부분적으로 수정 된 상태로 끝나지 않습니다). – L33tminion
문자의 줄 크기로 백업해야합니다. 다음 줄의 길이를 얻을 사용하여 백업 할 수 있습니다, 당신은 readline
를 사용 가정 :
file.seek(offset[, whence])
설정 어디서를 SEEK_CUR
에, -length
오프셋을 설정합니다.
Python Docs을 참조하거나 맨 페이지의 seek
을 참조하십시오.
아니요. 파일을 변경하면 읽지 않은 내용을 덮어 쓸 수 있기 때문에 읽고있는 파일에 안전하게 쓸 수 없습니다. 안전하게하려면 파일을 버퍼로 읽어 들여 필요한 모든 행을 업데이트 한 다음 파일을 다시 써야합니다.
파일의 바이트 단위를 바꾸는 경우 (즉, 바꾸려는 텍스트가 바꾸는 새 문자열과 동일한 길이 인 경우), 파일에서 벗어날 수 있습니다. 하지만 그것은 호 넷 둥지이므로 번거 로움을 덜어주고 전체 파일을 읽거나 메모리의 내용을 임시 파일로 바꾼 다음 다시 써주세요.
모드 'rb +'는 파일을 읽고, 이동하고, 쓸 수있게 해준다. – eyquem
@eyquem - 좋은 지적, 나는 나의 대답을 업데이트 할 것이다. –
- 1. setting.setting 파일에서 값을 수정할 수 있습니까?
- 2. 실행 파일에서 .frm 파일의 설정을 수정할 수 있습니까?
- 3. 이것으로 datagridview를 수정할 수 있습니까?
- 4. foreach 아키텍처를 수정할 수 있습니까?
- 5. 특정 메뉴에 대한 theme_menu_link를 수정할 수 있습니까?
- 6. Java에서 파일에서 행을 삭제하십시오.
- 7. 파일에서 행을 제거합니다.
- 8. bat 파일에서 둘 이상의 문자열을 수정할 수 없습니다.
- 9. 패널의 어린이 폭을 수정할 수 있습니까?
- 10. 생성 후 스칼라 클래스를 수정할 수 있습니까?
- 11. 다른 프로세스의 UID를 수정할 수 있습니까?
- 12. RoR CRUD 동작을 수정할 수 있습니까?
- 13. 이맥스 미니 버퍼의 색상을 수정할 수 있습니까?
- 14. 메모리의 MSI는 어떻게 수정할 수 있습니까?
- 15. 전달하기 전에 va_list를 수정할 수 있습니까?
- 16. Perl에서받은 소켓 메시지를 어떻게 수정할 수 있습니까?
- 17. VS2008 IDE에서 CPU 레지스터를 수정할 수 있습니까?
- 18. 어떻게 Settings.bundle을 실시간으로 수정할 수 있습니까?
- 19. Vim에서 어디서 파일을 수정할 수 있습니까?
- 20. 어쨌든 이클립스에서 키보드 단축키를 수정할 수 있습니까?
- 21. .NET에서 런타임시 메서드 본문을 수정할 수 있습니까?
- 22. int 0x80 루틴을 수정할 수 있습니까?
- 23. https 헤더를 어떻게 수정할 수 있습니까?
- 24. Perl에서 $ 0 값을 어떻게 수정할 수 있습니까?
- 25. 디스플레이의 원점을 수정할 수 있습니까? (win32)
- 26. 안드로이드에서 SMS 헤더를 읽고 수정할 수 있습니까?
- 27. 내 .ini 파일을 해킹/수정할 수 있습니까?
- 28. iOS : UIImagePickerController 기본 UI를 수정할 수 있습니까?
- 29. 여러 스레드가 사전을 수정할 수 있습니까?
- 30. URL 인수를 사용하여 Request.ReferrerUrl을 수정할 수 있습니까?
특정 조건에서 가능합니다. 처리 된 라인을 편집 한 결과 라인이 처리 된 라인보다 짧거나 긴 경우, 쉽게 처리 할 수 있습니다. 그렇지 않은 경우 편집을 수행하는 선이 너무 많지는 않지만 불가능하지는 않지만 더 어려워집니다. 큰 파일을 다루기 때문에이 질문을합니까? – eyquem
>>> f = open ('tmp', 'r +') >>> f.readline() '75 .14 \ n ' >>> f.readline() '100 \ n' >>> l = _ >>> f.seek (-l.len(), file.SEEK_CUR) >>> f.seek (-len (l), os .SEEK_CUR) >>> f.write ('999 \ n') >>> f.close() >>> – Bob
보기 (http://stackoverflow.com/questions/5286020/python-string) -replace-in-a-file-touch-the-no-substitution-file-without-no-substitution-)은 – eyquem