[python] python3 힘들게 배우기 #6

3 분 소요

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

태그:

카테고리:

업데이트:

댓글남기기