입출력 2. 사용자 입출력과 파일 입출력

변현섭·2023년 7월 27일
0
post-thumbnail

2. 사용자 입출력

1) 사용자 입력

input 함수를 이용하여 사용자에게 값을 입력받을 수 있다. Java의 경우 사용자 입력을 받는 과정이 간단하지만은 않다. 차라리 C/C++이 훨씬 더 간편할 정도이다. 하지만, 파이썬은 아래와 같이 매우 직관적이고 간결한 문법을 제공한다.

>>> a = input()
Life is too short, you need python
>>> a
'Life is too short, you need python'

이와 같이 사용자의 입력을 모두 저장한다. C/C++은 띄어쓰기가 있는 경우 scanf나 cin을 사용할 수 없고 get과 같은 함수를 이용해야 한다. 그러나 파이썬의 경우, 어떤 경우에나 input만 쓰면 된다. 특히, 사용자 입력을 받을 때에는 어떤 값을 입력해야 하는지 알려주기 위해 출력문과 함께 쓰는 경우가 많은데, 파이썬에서는 이것도 input 함수에서 처리해준다.

>>> number = input("숫자를 입력하세요: ")
숫자를 입력하세요: 3
>>> print(number)
3

참고로, 사용자 입력으로 받은 숫자는 문자열로 취급된다. 즉, 사용자 입력으로 어떤 값을 받든 항상 문자로 인식한다.

2) print

print의 사용법은 이전에도 많이 다루었으니, 파이썬에서 추가된 몇 가지 편리한 기능들에 대해 알아보기로 하자.
① 여러 문자열을 입력 값으로 전달

  • 큰 따옴표로 둘러싼 여러 문자열을 한 번에 전달할 수 있다.
  • 큰 따옴표로 둘러싼 문자열은 사이에 +가 생략된 형태로 볼 수 있다.
>>> print("life" " is" " too short")
life is too short
>>> print("life"+" is"+" too short") 
life is too short

② 문자열 띄어쓰기

  • 위와 같이 직접 띄어쓰기를 해도 되지만, 쉼표를 사용하여 띄어 쓸 수도 있다.
>>> print("life", "is", "too short")
life is too short

③ 한 줄에 결과 값 출력

  • end 키워드를 사용해 출력이 끝났을 때 추가적으로 출력할 문자를 지정할 수 있다.
  • 지금까지는 print에 end를 쓰지 않았는데, 이것은 end가 생략된 형태이다. end는 \n을 기본 값으로 갖기 때문에 생략할 경우, 자동으로 줄바꿈을 해준다. 즉, end를 생략한 print는 println과 같다.
  • 결과를 한 줄에 표시하기 위해서는 end에 ' ' 또는 ''을 넣어야 한다.
>>> for i in range(10):
...     print(i, end=' ')
...
0 1 2 3 4 5 6 7 8 9 >>>

3. 파일 입출력

파이썬의 파일 입출력에서 가장 두드러지는 특징은 파일을 위한 별도의 자료형이 없다는 것이다. Java의 경우, 파일을 읽기 위한 객체와 쓰기 위한 객체가 모두 필요하며, 심지어 확장자 별로 사용해야 할 객체도 다르다. 파이썬에서는 이러한 내용을 고려할 필요가 없다.

1) 파일 생성하기

VS Code에 아래의 명령을 입력한 후 실행해보자.

f = open("새파일.txt", 'w')
f.close()

이제 프로그램을 실행한 디렉토리에 가보면 새로운 파일이 생성된 것을 확인해볼 수 있다.

open은 파일의 이름과 파일 열기 모드를 입력인자로 받는다. 파일 열기 모드에는 r, w, a가 있다.

위와 같이 새로운 파일을 쓰기 모드로 열면 파일을 생성하지만, 기존 파일을 쓰기 모드로 열면, 기존의 내용이 모두 사라진다는 점에 유의해야 한다. 파일을 저장하는 경로를 바꾸고 싶으면, 파일의 이름에 저장 경로를 포함하여 작성하면 된다.

f = open("C:/doit/새파일.txt", 'w')
f.close()

참고로, close 명령은 C/C++, Java에서와 마찬가지로 생략해도 당장은 문제가 없다. 하지만, 나중에 다시 파일을 열 때, 에러가 발생할 수 있다. 그러므로 파일을 열었다면, 작업이 종료된 시점에 반드시 닫아주어야 한다.

※ with 키워드
open한 file을 자동으로 close하도록 설정하기 위해 with문을 사용할 수 있다. with문은 open한 파일을 as 뒤에 적인 파일 객체에 담고, with 블록이 종료되면, 열린 파일 객체를 자동으로 닫는다.

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

2) 파일의 내용 작성하기

파일을 생성했으니, 이제 내용을 적어보자.

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

3) 파일 읽기

① readline

  • 파일의 내용을 한 줄 읽어들이는 메서드이다.
# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
  • 아래와 같이 사용하면 모든 내용을 읽는 것도 가능하다.
f = open("C:/doit/새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()

② readlines

  • 사실 모든 내용을 읽을 때에는 readlines라는 메서드가 더 유용하다.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

③ strip

  • 줄바꿈 문자(\n)을 제거하는 용도로 사용한다.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    line = line.strip()  # 줄 끝의 줄 바꿈 문자를 제거한다.
    print(line)
f.close()

④ read

  • read함수도 파일의 모든 내용을 문자열로 리턴한다.
  • readlines는 파일의 내용을 줄 단위로 읽어 리스트로 반환하는 반면, read는 파일의 내용 전체를 하나의 문자열로 반환한다.
  • read는 메모리를 많이 차지하기 때문에 자주 사용되지는 않는다.
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()

⑤ for문과 함께 사용하기

  • 파일을 줄 단위로 읽기 위해 for문을 사용할 수도 있다.
f = open("C:/doit/새파일.txt", 'r')
for line in f:
    print(line)
f.close()

4) 파일에 내용 추가하기

위에서 설명한대로, 파일에 내용을 추가하려면 w가 아닌 a모드로 파일을 열면된다.

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

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글