[python] python3 힘들게 배우기 #6
github으로 홈페이지 이전에 성공했다! 생각보다 복잡해서 시간이 많이 걸렸다. jekyll도 알아야 하고 theme 세팅도 복잡하고.. wordpress, aws 다 쓰고 있는데 그래도 이만큼 좋은 곳이 없는 듯 하다.
ex20. 함수와 파일
여러가지 함수를 사용해서 파일 내용을 프린트해보자. 새로 배우는 함수들이 몇몇 나오므로 주의해서..
먼저 ex20_sample.txt파일을 만들고 아래와 같이 내용을 입력하자.
This is line 1.
This is line 2.
This is line 3.
이후 다음과 같은 ex20.py를 작성하자.
from sys import argv
script, sample_file = argv
# 파일 전체를 프린트하는 함수
def print_file(f):
print(f.read())
# 파일의 맨 앞부분으로 가는 함수 (테잎을 감듯이)
def rewind_file(f):
f.seek(0)
# 파일을 1줄씩만 프린트하는 함수
def print_by_line(line_count, f):
print(line_count, f.readline())
# 함수실행 전, 파일을 열어서 변수에 저장해 높음 (CD케이스를 열듯)
current_file = open(sample_file)
# 전체 파일 프린트
print_file(current_file)
# 되감기 (테이프 되감듯)
rewind_file(current_file)
# 1줄씩 프린트
count = 1
print_by_line(count, current_file)
count = count + 1
print_by_line(count, current_file)
count = count + 1
print_by_line(count, current_file)
먼저 seek()
함수가 눈에 띈다. seek()
의 경우 파일에서 원하는 위치로 가는데, 안에 들어가는 인수는 byte단위이다. 즉 위 예제에서는 0
이 들어가 있으므로 가장 앞칸에 위치하게 되겠다.
readline()
의 경우 파일 내에 현재 위치한 line에서 “\n” 이 나올 때까지 읽어준다. 다 읽은 후 자동으로 “\n”가 되어버린다.
ex20.py ex20_sample.txt
로 실행하자. 아래와 같은 결과를 볼 수 있다.
This is line 1.
This is line 2.
This is line 3.
1 This is line 1.
2 This is line 2.
3 This is line 3.
만약 seek(0)
를 하지 않는다면? print_file
함수로 인해 현재 파일 전체를 read()
한 상태이므로 커서(?) 는 맨 끝에 위치하게 되고, 따라서 읽을 것이 없다. 아래와 같은 결과가 나온다.
This is line 1.
This is line 2.
This is line 3.
1
2
3
줄띄움이 되지 않는 것에 주의하자.
또한 count = count + 1
의 경우, count += 1
로 축약 가능!
마치 영어의 I am을 I’m으로 축약하는것과 비슷하다고 한다(정말?)
ex21. Returning
Return 의 개념에 대해 처음 배운다. Function을 통해 지금까지는 file을 변형하거나 읽어왔다면, Return은 특정 값을 반환해준다. 간단히만 짚고 넘어가자.
def add(x, y):
print(f"Adding {x} + {y} ...")
return x + y
result = add(10, 20)
print(f"Result is {result}")
return 값을 변수에 지정할 수 있음에 주목하자. 일반적인 방법이다. 당연하게도 해당 변수는 다른 함수의 인수로 또 사용될 수 있다.
Adding 10 + 20 ...
Result is 30
댓글남기기