이미 존재하는 파일에 데이터를 추가할 때는 "a" 파일 모드를 사용합니다. "a"는 "append"의 약자입니다.
outfile = open("phones.txt", "a")
outfile.write("최무선 010-1111-2222")
outfile.write("정중부 010-2222-3333")
outfile.close()
파일에서 텍스트를 읽어서 출력하다보면 파일에 들어 있는 줄바꿈 기호 때문에 의도하지 않게 빈 줄이 추가되는 일이 발생합니다.
예를 들어서 다음과 같은 파일을 봅시다.
An empty street
An empty house
A hole inside my heart
I'm all alone
The rooms are getting smaller
위의 파일을 읽어서 화면에 출력하는 프로그램을 작성해봅시다.
infile = open("myLove.txt", "r")
for line in infile:
print(line)
infile.close()
<실행 결과>
An empty street
An empty house
A hole inside my heart
I'm all alone
The rooms are getting smaller
출력 결과를 보면 문장의 사이에 빈 줄이 하나씩 들어 있음을 알 수 있습니다. 왜 이런 결과가 출력되었을까요?
텍스트 파일에서 첫 번째 줄은 다음과 같이 저장되어 있습니다.

여기서 문제가 되는 것은 줄의 끝에 있는 줄바꿈 기호인 '\n' 입니다. 이것 때문에 빈 줄이 출력된 것입니다.
따라서 파일에서 읽을 때 줄의 끝에 있는 줄바꿈 기호를 삭제하고 읽을 수 있으면 좋을 것입니다. 파이썬에서는 rstrip() 메소드가 이런 작업을 합니다.
line = line.rstrip()
위의 코드에 위의 문장을 추가하면 빈 줄이 사라지게 됩니다. rstrip()은 줄바꿈 문자 뿐만 아니라 공백문자도 제거합니다. strip()은 줄의 첫 부분과 끝에서 공백 문자를 삭제합니다.
텍스트 파일에서 단어를 읽어야 한다면 어떻게 해야 할까요? 예를 들어서 앞에 나왔던 노래 가사에서 단어를 분리하여 리스트로 만들고 싶다고 합시다.
이때 사용할 수 있는 것이 split() 메소드입니다. 문자열 객체의 split() 메소드는 공백문자를 이용하여 문자열에서 단어들을 분리합니다.
infile = open("myLove.txt", "r")
for line in infile:
line = line.rstrip()
wordList = line.split()
for word in wordList:
print(word)
infile.close()
<실행 결과>
An
empty
street
An
empty
house
A
hole
inside
my
heart
I'm
all
alone
The
rooms
are
getting
smaller
문자열에서 단어를 분리할 때 공백이 아닌 다른 분리자를 사용하고 싶으면 split() 메소드의 인수로 분리자로 사용되는 문자를 주면 됩니다.
예를 들어서 ":"을 사용하여 분리하고 싶으면 아래와 같이 합니다.
line = "Bad: news: travels: fast."
word_list = line.split(":")
print(word_list)
<실행 결과>
['Bad', ' news', ' travels', ' fast.']
텍스트 파일에는 텍스트 형태의 데이터만 저장할 수 있습니다. 따라서 만약 숫자 데이터를 저장해야 한다면 숫자를 문자열로 변환한 후에 저장하여야 합니다.
숫자를 문자열로 저장하려면 숫자에 str() 함수를 적용합니다.
outfile = open("number.txt", "w")
for i in range(10):
outfile.write(str(i) + " ")
outfile.close()
<실행 결과>
0 1 2 3 4 5 6 7 8 9
위의 코드에서 0부터 9까지의 정수는 str() 함수에 의하여 문자열로 변환된 후에 파일에 기록됩니다.
우리가 윈도우에서 파일을 열 때는 tkinter의 파일 열기 대화 상자를 이용하면 파일을 쉽게 찾을 수 있습니다.
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
readFile = askopenfilename()
if readFile != None:
infile = open(readFile, "r")
for line in infile.readlines():
line = line.strip()
print(line)
infile.close()
<실행 결과>

An empty street
An empty house
A hole inside my heart
I'm all alone
The rooms are getting smaller
1. 텍스트 파일을 열어서 파일 안의 스페이스 문자의 개수와 탭의 개수를 세는 프로그램을 작성해 봅시다.
<실행 결과>
파일 이름을 입력하세요 : myLove.txt
스페이스 수 = 14, 탭의 수 = 0
2. 텍스트 파일을 열어서 각 줄의 앞에 번호를 매겨서 다시 파일에 쓰는 프로그램을 작성해봅시다.
<입력 파일> - myLove.txt
An empty street
An empty house
A hole inside my heart
I'm all alone
The rooms are getting smaller
<실행 결과>
읽을 파일 이름을 입력하세요 : myLove.txt
결과를 쓸 파일 이름을 입력하세요 : output.txt
<파일 출력 결과>
1: An empty street
2: An empty house
3: A hole inside my heart
4: I'm all alone
5: The rooms are getting smaller
3. 파일 안의 각 문자들이 몇 번이나 나타나는지를 세는 프로그램을 작성해봅시다.
<입력 파일> - myLove.txt
An empty street
An empty house
A hole inside my heart
I'm all alone
The rooms are getting smaller
<실행 결과>
파일명을 입력하세요 : myLove.txt
{'A': 3, 'n': 5, ' ': 14, 'e': 13, 'm': 6, 'p': 2, 't': 7, 'y': 3, 's': 5, 'r': 5, 'h': 4, 'o': 5, 'u': 1, 'l': 6, 'i': 3, 'd': 1, 'a': 5, 'I': 1, "'": 1, 'T': 1, 'g': 2}
4. CSV(Comma Separated Values) 형식은 엑셀과 같은 스프레드시트나 데이터베이스에서 가장 널리 사용되는 입출력 형식입니다.
파이썬은 CSV 형식을 읽기 위해서 csv 라고 하는 모듈을 제공합니다. 이 모듈을 이용하면 CSV 파일을 쉽게 읽을 수 있습니다. 우리는 연습 삼아서 CSV 형식의 파일을 읽는 코드를 작성해봅시다.
<입력 파일> - data.csv
1/24/1997,11,3,red
11/27/1998,5,2,green
3/6/1997,9,1,blue
<출력 결과>
csv 파일 이름을 입력하세요 : data.csv
1/24/1997,11,3,red
1/24/1997
11
3
red
11/27/1998,5,2,green
11/27/1998
5
2
green
3/6/1997,9,1,blue
3/6/1997
9
1
blue
5. 로마의 유명한 정치가였던 쥴리어스 시저(Julius Caesar, 100-44 B.C.)는 친지들에게 비밀리에 편지를 보내고자할 때 다른 사람들이 알아보지 못하도록 문자들을 다른 문자들도 치환하였습니다.
시저 암호의 규칙을 표로 그려 보면 아래와 같습니다.
| 평문 | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 암호문 | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C |
점술회 회장 봉민이도 시저 암호를 통해 회원들에게 약속 장소를 알리려고 할 때 봉민이가 보낸 평문을 암호화 하는 프로그램과 복호화 하는 프로그램을 만들어봅시다.
<실행 결과>
평문 : the language of truth is simple.
암호문 : wkh odqjxdjh ri wuxwk lv vlpsoh.
복호문 : the language of truth is simple.