[Python 기초] 사용자 입출력 & 파일 읽고 쓰기

업데이트:

개요

jpg


1. 사용자 입력과 출력 - input()

사용자의 입력을 요구하는 input()함수는 앞의 포스팅에서 간간히 다뤘던 적이 있다.

a = input()
[사용자가 입력한 문장]
"Hi, my name is YG analyst"

이와 같이 input()함수를 사용하면 사용자가 입력하도록 block이 생성되고, 입력하면 그 변수에 자동으로 저장된다.

a
[Output] '"Hi, my name is YG analyst"'

빈 block이 아니라 사용자에게 어떤 설명을 보여주도록 프롬프트를 띄울 수 있다.

number = input("숫자를 입력하세요.")
숫자를 입력하세요.7    <- 사용자가 입력한 값
print(number)
[Output] 7


2. 사용자의 입력과 출력 - print()

첫 포스팅부터 항상 다뤄왔던 print()함수에 대해 조금 자세히 알아보자.

큰따움표(“)로 둘러싸인 문자열은 + 연산과 동일하다.

print("my" "name" "is" "YG analyst")
[Output] mynameisYG analyst
print("my" + "name" + "is" + "YG analyst")
[Output] mynameisYG analyst

문자열 띄어쓰기는 콤마(,)로 한다.

print("my", "name", "is", "YG analyst")
[Output] my name is YG analyst

한 줄에 결과값 출력하기 (end = ‘ ‘)

앞의 구구단 예제에서도 다룬적이 있다.

기본적으로 for문은 가져올 값을 하나씩 변수 i에 입력받으므로 print()하면 하나하나 출력된다.

for i in range(10):
print(i)
[Output]
0
1
2
3
4
5
6
7
8
9
10

이러한 결과를 보기 쉽게 한줄로 출력하려면 옵션인 end = " "를 추가해서 공백으로 이어지도록 하면 된다.

for i in range(10):
    print(i, end = " ")
[Output] 0 1 2 3 4 5 6 7 8 9 


3. 파일 읽고 쓰기(open, write)

데이터를 읽고 쓰는 일은 가장 선행되는 작업이다. 사실 가장 오류가 많이 발생하는 부분은 인코딩이나 파일형식에 의함이다. 이부분은 추후에 더 자세하게 알아보도록 하겠다.

기본적인 읽고 쓰는 함수는 open을 이용한다. 이외에도 판다스에서 사용되는 함수들도 있으나 이는 다른 포스팅에 게시할 예정이다.

파일 객체 = open(파일 경로와 이름, 파일 열기모드)
파일 열기 모드 설명
r 읽기 모드 - 파일을 읽기만 할 때 사용
w 쓰기 모드 - 파일에 내용을 쓸 때 사용
a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용
f = open("새파일.txt",'w')
f.close()

쓰기모드'w'로 열게 되면 해당 파일이름이 이미 존재하면 내용이 모두 사라지고, 존재하지 않으면 새로운 파일이 생성된다.
이점을 꼭 주의해야한다.

close()함수는 열려있는 파일객체(또는 변수)를 닫아주는 역할을 한다. 메모리 정리나 이미 다른 변수로 이용되어 불필요하다면 닫아주는게 좋다.

f = open("새파일.txt",'w')
for i in range(1,11):
    data = "%s번째 줄입니다.\n" % i
    f.write(data)
f.close()

파일을 쓰기모드로 열었기 때문에 파일에 내용을 써 보았다. write()함수를 이용하면 해당 내용을 파일에 저장하게 된다.

png

확인해보면 다음과 같다.

f = open("새파일.txt",'w') 에서 별도의 경로지정이 없을 경우 해당 작업 디렉토리에 생성된다. write()함수도 마찬가지이다.

비교를 위해 print()함수로 출력해 보자.

for i in range(1,11):
    data = "%s번째 줄입니다.\n" % i
    print(data)
1번째 줄입니다.

2번째 줄입니다.

3번째 줄입니다.

4번째 줄입니다.

5번째 줄입니다.

6번째 줄입니다.

7번째 줄입니다.

8번째 줄입니다.

9번째 줄입니다.

10번째 줄입니다.

즉, 이와 같은 출력물을 write()함수를 이용해 새파일.txt에 쓰고 저장해준 것이다.


4. 외부 데이터 읽기

readline()함수 이용하기

좀전에 내가 생성한 새파일.txt라는 파일이 외부에서 가져와 읽어야 할 데이터라고 생각해보자.
open()함수만으로는 이 자료를 파악할 수 없다. 이럴때 readline()함수를 이용해보자.

f = open("새파일.txt",'r')
line = f.readline()
print(line)
[Output] 1번째 줄입니다.

이와 같이 readline()은 첫번째 문장을 읽는 기능을 한다.

모든 문장을 읽고 싶다면 while문을 활용 할 수 있다.

f = open("새파일.txt",'r')
while True:               #조건문이 True 이므로 무한루프이다.
    line = f.readline()
    if not line: break    #더이상 읽을 line이 없으면 break로 빠져나온다.
    print(line)
[Output]
1번째 줄입니다.

2번째 줄입니다.

3번째 줄입니다.

4번째 줄입니다.

5번째 줄입니다.

6번째 줄입니다.

7번째 줄입니다.

8번째 줄입니다.

9번째 줄입니다.

10번째 줄입니다.

여기서 재미있는 점은 f.readline()은 f에 저장된 데이터를 계속 반복해서 읽는게 아니라는 점이다.

f.readline()
[Output] ''

위에서 while문을 이용해 모든 문장을 읽은 후 다시 f.readline()을 하면 결과가 없는 것을 알 수 있다.
즉, 자료를 읽어와 readline()함수를 이욯해 자료를 읽어 내장변수에 저장하게되면 f는 이제 불필요한 변수가 된다.
따라서 f.close()를 항상 붙여주는 것이 좋으며 이 과정을 생락하기 위해 with함수를 이용하기도 한다. 이는 포스틍 밑 부분에 설명한다.

readlines()함수 이용하기

이 함수는 readline()함수와 거의 같은 함수이다. 하지만 다수의 문장을 읽기 위한 함수로 각각의 문장을 모두 리스트로 저장해 준다.

f = open("새파일.txt",'r')
line = f.readlines()
print(line)
[Output]
['1번째 줄입니다.\n', '2번째 줄입니다.\n', '3번째 줄입니다.\n', '4번째 줄입니다.\n', '5번째 줄입니다.\n', '6번째 줄입니다.\n', '7번째 줄입니다.\n', '8번째 줄입니다.\n', '9번째 줄입니다.\n', '10번째 줄입니다.\n']
f = open("새파일.txt",'r')
line = f.readlines()
for i in line:
    print(i)

마찬가지로 반복문인 for문을 이용해 한문장씩 출력해 볼 수도 있다. 자료의 경우 한 문장만 있는 경우는 거의 없으므로 이 readlines()함수를 이용하는 것이 유용하다.

read()함수 이용하기

f = open("새파일.txt", 'r')
data = f.read()
print(data)
f.close()
[Output]
1번째 줄입니다.
2번째 줄입니다.
3번째 줄입니다.
4번째 줄입니다.
5번째 줄입니다.
6번째 줄입니다.
7번째 줄입니다.
8번째 줄입니다.
9번째 줄입니다.
10번째 줄입니다.

앞에서 살펴본 readlines()함수와 다른 차이가 없어보이지만, 문자열로 리턴하는 차이가 있다.

type(data)
[Output] str


5. 파일에 새로운 내용 추가하기

쓰기모드'w'와 읽기모드'r'를 살펴보았고, 이번에는 새로운 값을 추가하는 추가 모드'a'를 알아보자.

앞서 쓰기모드'w'에서 range(1,11)로 1번부터 10번줄까지 작성했었다. 이번에는 그 뒤로 11번째 줄부터 20번째 줄까지의 문장을 추가해보자.

f = open("새파일.txt",'a')
for i in range(11,20):
    data = "추가 %s번째 줄입니다.\n" % i
    f.write(data)

다시 읽기함수(read(),readline(),readlines())를 이용해서 화면에 출력해 보는 방법도 있으나 직접 디렉토리에 새파일.txt를 열어 확인해본다.

png

추가된 10개의 문장을 볼 수 있다.


6. with함수

앞의 예에서는 다음과 같이 open()close()를 반복했었다.

f = open("foo.txt", 'w')
f.write("Life is too short, you need python")
f.close()

하지만 이러한 과정을 with를 이용해 조금더 간편하게 만들 수 있다.

with open("foo.txt",'w') as f:
    f.write("Life is too short, you need python")

그러면 f라는 경로를 거쳐서 파일에 쓰는 작업을 완료했고 작업창에는 f변수가 남아있지 않게 된다.


Reference

도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.

댓글남기기