반응형
파이썬에서 문자열을 출력할 때 ' + '와 ' , '와는 차이점이 있습니다.
문자열을 하나로 결합하느냐, 한 줄에 출력하느냐의 차이입니다.

 

1. ' + ' 연산자

  • + 연산자를 사용하면 문자열을 연결할 수 있습니다.
  • 두 개의 문자열을 결합하여 하나의 새로운 문자열을 생성합니다.
  • 문자열과 변수를 결합할 때도 마찬가지 입니다.
# test.py

name = "우기"
age = 25
print("내 이름은 " + name + " 이고 나이는 " + str(age) + "살 입니다.")

'''
( 실행 결과 )
$ python test.py
내 이름은 우기이고 나이는 25살 입니다.
'''

 

 

2. ' , '  콤마

  • 여러 개의 값을 한 줄에 출력해 줍니다.
  • 콤마로 구분된 각각의 문자열이나 변수 값사이에 공백이 추가 됩니다.
# test.py

name = "우기"
age = 25
print("내 이름은 ", name, " 이고 나이는 ", str(age), "살 입니다.")

'''
( 실행 결과 )
$ python test.py
내 이름은  우기  이고 나이는  25 살 입니다.
'''

 

둘 다 모두 문자열을 출력하는 방법이지만 '+'를 사용하면 문자열을 명시적으로 결합하고, ','콤마를 사용하면 자동으로 구분된 형태로 출력됩니다.

 





반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,
반응형

파이썬 코드를 보면 다음과 같은 코드를 자주 보게 됩니다.

if __name__ == "__main__":

 

__name__이란 모듈(module)의 이름(파일 이름)을 저장하는 파이썬의 내장 변수 입니다.
__main__ 은 최상위 모듈, 즉 현재 실행되는 스크립트를 나타내는 이름입니다. 파일의 이름과 상관없이 제일 처음 실행되는 파일의 모듈 이름은 __main__입니다.
따라서 위의 코드는 모들의 이름이 __main__이면, 즉 if문의 조건이 참(True)이면 if문에 코딩한 내용을 실행하게 됩니다.
즉 현재 스크립트로 실행되는지, 아니면 다름 스크립트의 모듈로 임포트되어 사용되는지를 판단하는 데 사용됩니다.

 

예제를 통해 자세히 알아 보겠습니다.

#  woo.py

def add(a, b):
    print('이 함수는 woo모듈의 add함수 입니다.')
    return a + b
    
# __name__ 변수 출력
print('모듈 이름:', __name__) 

# 이 모듈이 최상위 모듈이면 add( )함수를 실행
if __name__ == '__main__':
    print(add(1, 2))

'''
( 실행 결과 )
$ python woo.py
모듈 이름: __main__
이 함수는 woo모듈의 add함수 입니다.
3
'''

현재 woo.py 모듈만 있고, 따라서 이 모듈이 main이기 때문에 if문 안에 있는 foo( )함수가 실행됩니다.

 

이제 다른 모듈에서 woo모듈을 호출해서 사용해 보겠습니다.

#  boo.py

import woo # woo모듈을 가져 옵니다.

# __name__ 변수 출력
print('모듈 이름:', __name__) 

def sub(a, b):
    print('이 함수는 boo모듈의 sub함수 입니다.')
    return a - b

if __name__ == "__main__": # 이 파일이 시작점일 때만 아래 코드를 실행
    print(woo.add(5, 2))
    print(sub(5, 2))

'''
( 실행 결과 )
$ python boo.py
모듈 이름: woo
모듈 이름: __main__
이 함수는 woo모듈의 add함수 입니다.
7
이 함수는 boo모듈의 sub함수 입니다.
3
'''

woo.py는 boo.py에 import해서 사용하기 때문에 더이상 __main__이 아닙니다.

따라서 모듈이름 woo가 출력됩니다.

반면 지금 실행한 boo.py는 최상위 모듈이기 때문에 모듈 이름은 __main__으로 출력됩니다.

그리고 if문의 조건이 만족하기 때문에 woo.add( )와 sub( )함수 모두 실행 됩니다.

 

__name__ 과 __main__

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,
반응형
파일을 원하는 위치부터 원하는 만큼만 읽고 싶을 때 쓰는 메소드입니다.

 

이렇게 읽어 들이 파일을 이용하여 원하는 지점 부터 원하는 만큼 출력할 수 있습니다.

seek( offset [, whence] )

  • offset : 파일 내의 읽기/쓰기 포인터( 커서 )의 위치입니다.
  • whence : 포인터( 커서 )이동의 기준점입니다.
    - 기본값은 0이며 생략할 수 있습니다.
    - 0(기본값)은 파일의 처음을 의미 합니다.
    - 1은 현재 파일의 포인터(커서) 위치를 의미 합니다.
    - 2는 파일의 끝을 의미합니다.

  * [ ] 대괄호 안의 whence는 생략할 수 있습니다.

 

우선 파일을 읽어 객체를 생성합니다.

# test.txt파일을 읽기 모드로 읽어서 foo에 보관합니다.
# test.txt의 내용은 '0123456789 abcdefghi'라고 가정합니다.(20바이트)
foo = open( 'test.txt' , mode='r', encoding='utf-8' )

# 만일 파일의 맨 뒤에서 읽어오려면 파일을 바이너리 모드로 읽어와야 합니다.
# 이때 인코딩은 하지 않습니다.
foo = open( 'test.txt' , mode='rb' )

 

 

import re

# 텍스트 모드로 읽을 때
# foo = open( 'test.txt', mode='r', encoding='utf-8' )

# 바이너리 모드로 읽을 때
foo = open( 'test.txt', mode='rb')
bar = foo.read()
print(bar)
# 출력 텍스트 모드: 0123456789 abcdefghi
# 출력 바이너리 모드: b'0123456789 abcdefghi'

# whence는 생략 되었기 때문에 커서는 처음부터 3글자를 이동한 후에 2글자를 읽어 들입니다.
foo.seek(3)
foobar = foo.read(2)
print(foobar) 
# 출력 텍스트 모드: 34
# 출력 바이너리 모드: b'34'

# 여기서 다시 읽으면 현재 커서의 위치가 5글자 다음에 위치 하기 때문에 그 다음 부터 읽어 들이게 됩니다.
foobar = foo.read(3)
print(foobar) 
# 출력 텍스트 모드: 567
# 출력 바이너리 모드: b'567'

# 커서를 파일 맨뒤에서 5글자 앞(왼쪽)으로 간 후에 2글자를 읽어 옵니다.
# 여기서 주의할 점은 뒤에서 부터 읽어 들이려면, 파일을 가져 올때 바이너리 모드로 가져와야 합니다. mode='rb'
foo.seek(-5, 2)
foobar = foo.read(2)
print(foobar) 
# 출력 텍스트 모드: ef
# 출력 바이너리 모드: b'ef'

 

seek() 메소드 사용법

반응형
블로그 이미지

DeveloperN

개발자 n의 개발 이야기(draft)

,