본문 바로가기
강의/점프투파이썬

[점프투파이썬] 4. 문서에 있는 탭(tab)을 공백(space)으로 바꾸기(sys.argv/replace)

by 소꿍 2020. 3. 17.

4. 문서 파일을 읽어서 그 문서 파일 안에 있는 탭(tab)을 공백(space) 4개로 바꾸어 주는 스크립트를 작성해 보자.

 

- 내 답안

필요한 것: 문서 파일을 읽는다.

              탭을 공백으로 바꾼다.

 

1) 문서 파일을 만들고("test6-5.txt") 탭이 들어간 내용을 작성한다.

f = open("C:/doit/test6-5.txt", 'w')
f.write("   You need python!    ")
f.close()

 

2) 파일을 읽어 와서, 파일의 탭을 공백으로 바꾼다.(replace 쓰기)

f = open("C:/doit/test6-5.txt", 'r')
body = f.read()

body = body.replace('   ', '    ')

f = open("C:/doit/test6-5.txt", 'w')
f.write(body)
f.close()

 

*Q.여기서 궁금한 점: 탭이 공백으로 바뀌었는지 어떻게 구분하나?


- 해설

필요한 기능: 문서 파일 읽어 들이기, 문자열 변경하기(탭->공백)

입력: 문서 파일

출력: 탭이 공백으로 수정된 문서 파일

 

다음과 같은 형식으로 프로그램이 수행되도록 만든다.

python tabto4.py src dst

 

tabto4.py는 작성해야 할 파이썬 프로그램 이름,

src는 탭을 포함하고 있는 원본 파일 이름, dst는 파일 안의 탭을 공백 4개로 변환한 결과를 저장할 파일 이름

 

*a 파일의 내용 자체를 아예 새로운 파일 b에 저장한다. 나는 생각지도 못한 방법..!

 

1) 먼저 "tabto4.py" 파일을 작성한다.

import sys

src = sys.argv[1]
dst = sys.argv[2]

print(src)
print(dst)

 

2) 테스트를 위한 원본 파일(탭을 포함하는 파일)인 a.txt를 작성한다.

Life    is  too short
You need    python

 

3) "tabto4.py"의 코드를 수정한다.

import sys

src = sys.argv[1]
dst = sys.argv[2]

f = open(src)
tab_content = f.read()
f.close()

space_content = tab_content.replace("\t", " "*4)
print(space_content)

4) 다음 명령을 수행하면 탭이 공백으로 변경돼 출력된다.

C:\doit>python tabto4.py a.txt b.txt
Life is too short
You need python

 

 

5) 바뀐 내용을 b.txt에 저장할 수 있게 "tabto4.py"를 수정한다.

import sys

src = sys.argv[1]
dst = sys.argv[2]

f = open(src)
tab_content = f.read()
f.close()

space_content = tab_content.replace("\t", " "*4)

f = open(dst, 'w')
f.write(space_content)
f.close()

6) 다음 명령을 수행하면 a.txt의 내용이 b.txt에 저장된다.

C:\doit>python tabto4.py a.txt b.txt

에디터로 b.txt 파일을 열어서 탭이 4개의 공백 문자로 변경되었는지 확인해 보자.

프로그램을 작성할 때 사용하는 에디터는 대부분 탭과 공백 문자를 다르게 표시하므로 눈으로 확인이 가능할 것이다.

 

*열어봤는데 차이를 잘 모르겠다...

 

단순히 파일을 만들어서 그 파일의 내용을 바꾸는 것에 그치지 말고 더 넓게 생각하고 풀어보자.

댓글