31 Aug 2017 » python

2017-08-31-python

argv와 raw_input을 함께 쓰는 연습을 해보자.

  • > Prompt를 출력하도록 raw_input( )을 사용함

다음 스크립트를 ex14.py으로 만들자.

In [ ]:
# -*- coding: utf-8 -*-

from sys import argv

script, user_name = argv
prompt = '> '

# Fix Python 2.x.
try:
    input = raw_input
except NameError:
    pass

print("안녕 {}, 나는 {} 스크립트야.".format(user_name, script))
print("몇 가지 질문을 할게.")
print("{}, 나를 좋아해?".format(user_name))
likes = input(prompt)

print("{}, 어디에 살아?".format(user_name))
lives = input(prompt)

print("무슨 종류의 컴퓨터를 갖고 있어?")
computer = input(prompt)

print("""
좋아, 나를 좋아하냐는 질문에는 '{}'.
'{}'에 살아. 어딘지는 모르겠지만.
그리고 '{}' 컴퓨터를 가졌어. 멋져
""".format(likes, lives, computer))

argv

커맨드라인에서 스크립트를 실행할 때 받아야할 실행인자

위에서는 user_name이다.

raw_input( )

스크립트가 실행될 때 정보를 얻고 싶을 때 사용

In [ ]:
likes = input(prompt)
lives = input(prompt)
computer = input(prompt)

위 처럼 prompt를 넘기면서 질문의 답을 저장한다.

  • 위 변수를 fotmat을 활용하여 최종적으로 답변을 출력한다.

위 스크립트를 실행하면 다음과 같다.


파일 읽기

다음 파일을 만들자.

  • ex15.py
  • ex15_sample.txt

ex15_sample.txt

파일에 쓴 내용입니다.

이건 정말로 멋져요.

재미로 가득 차 있어요.

ex15.py

In [ ]:
# -*- coding: utf-8 -*-

from sys import argv

# 실행인자
script, filename = argv

# Fix Python 2.x.
try:
    input = raw_input
except NameError:
    pass

# 파일을 열어라.
txt = open(filename)

print("파일 {}의 내용:".format(filename))
print(txt.read())

print(("파일 이름을 다시 입력해 주세요."))
file_again = input(">")

txt_again = open(file_again)

print(txt_again.read())

스크립트를 실행하면 다음과 같다.

파일 열기와 닫기

In [ ]:
open(filename) # 파일을 다 썼으면, close()를 사용해서 닫아야한다. 닫는 것도 중요하다.
In [ ]:
txt = open(filename)
txt.close()

파일 객체(file object)를 만든다.

파일 객체는 테이프나 DVD 재생기처럼 'Only read'

  • 파일 자체는 아니다.

파일 읽고 쓰기

알아 두어야할 메소드

close : 파일 닫기

read : 파일 내용을 읽기. 결과를 변수에 대입할 수 있다.

readline : 텍스트 파일에서 한 줄을 읽기

truncate : 파일 내용을 비움, 중요한 파일이라면 조심할 것!

write : 파일에 내용쓰기

ex16.py 스크립트를 만들자

In [ ]:
# -*- coding: utf-8 -*-

from sys import argv

script, filename = argv

print("{} 파일을 지우려 합니다.".format(filename))
print("취소하려면 CTRL-C를 누르세요.")
print("진행하려면 리턴을 누르세요.")

# input generate
try:
    input = raw_input
except NameError:
    pass

input("?")

print("파일 여는 중...")
target = open(filename, 'w')

print("파일 내용을 지웁니다. 안녕히!")
target.truncate()

print("이제 세 줄에 들어갈 내용을 묻겠습니다.")

line1 = input("1줄: ")
line2 = input("2줄: ")
line3 = input("3줄: ")

print("이 내용을 파일에 씁니다.")

target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")

print("마지막으로 닫습니다.")
target.close()

실행하면 다음과 같다.

문자열, 포맷, 탈출 순서열을 사용하여 target.write()

6번 → 1번으로 줄이기

In [ ]:
# -*- coding: utf-8 -*-

from sys import argv

script, filename = argv

print("{} 파일을 지우려 합니다.".format(filename))
print("취소하려면 CTRL-C를 누르세요.")
print("진행하려면 리턴을 누르세요.")

# input generate
try:
    input = raw_input
except NameError:
    pass

input("?")

print("파일 여는 중...")
target = open(filename, 'w')

print("파일 내용을 지웁니다. 안녕히!")
target.truncate()

print("이제 세 줄에 들어갈 내용을 묻겠습니다.")

line1 = input("1줄: ")
line2 = input("2줄: ")
line3 = input("3줄: ")

print("이 내용을 파일에 씁니다.")

## 수정된 부분
target.write("{} \n {} \n {} \n".format(line1,line2,line3))

print("마지막으로 닫습니다.")
target.close()
In [ ]:
open(filename, 'w')  # write mode
open(filename, 'r')  # read mode / Default
open(filename, 'a')  # append mode
open(filename, 'm')  # modifier mode

파일을 복사하기

ex17.py 스크립트를 만들자

In [ ]:
# -*- coding: utf-8 -*-

from sys import argv
from os.path import exists

script, from_file, to_file = argv

print("{}에서 {}로 복사합니다.".format(from_file, to_file))

in_file = open(from_file)
indata = in_file.read()

print("입력 파일은 {}바이트입니다.".format(len(indata)))

# exists → 파일이 있으면 True, 없으면 False 반환
print("출력 파일이 존재하나요? {}".format(exists(to_file)))
print("준비되었습니다. 계속하려면 리턴 키를, 취소하려면 CTRL-C를 누르세요.")

# input generate
try:
    input = raw_input
except NameError:
    pass

input()

out_file = open(to_file, 'w')
out_file.write(indata)

print("좋습니다. 모두 완료되었습니다.")

out_file.close()
in_file.close()

실행하면 다음과 같다.

echo

위처럼 파일을 만들 수 있다.

cat

파일을 화면에 출력하는 가장 쉬운 방법

cat은 파일을 이어 붙이는데 쓰는 오래된 명령

In [ ]:
in_file = open(from_file)
indata = in_file.read()

위 코드를 아래와 같이 수정하면, indata.close() 입력하면 에러가 발생한다.

In [ ]:
indata = open(from_file).read()

∵ 위의 줄을 실행하고 나면 자동으로 파일을 닫아 버리기 때문에 에러가 발생하게 된다.


Reference

  • 깐깐하게 배우는 파이썬


Related Posts