파이썬 파일 입출력




안녕하세요 열코입니다.

저번시간에 C/C++과 자바에서 파일처리에 대해 알아보았습니다.

이번에는 파이썬에서의 파일 입출력에 대해 살펴볼텐데요.

C/C++에 비해 자바가 조금 더 쉽고 편한것 보다 C/C++, 자바보다 파이썬은 훨씬 간단한 것 같네요... (역시 갓이썬...)

자 그럼 바로 파이썬의 파일 입출력에 대해 알아보겠습니다!


먼저 다른 언어들과 마찬가지로 파일 처리의 순서는 다음과 같습니다.


[파일 처리 순서]

파일 열기 - 파일 읽기 또는 쓰기 - 파일 닫기


파일을 먼저 열고, 파일을 읽어서 변수에 저장하거나 변수의 데이터를 파일에 쓰고 난 후 사용이 끝나면 꼭 파일을 닫아줍니다.


1. 파일 열기

파이썬에서 파일 열기는 open() 함수를 사용하는데요.

사용법은 아래와 같습니다.


[예제 코드]

f = open("파일 경로", '접근 방식')


파이썬 역시 C/C++과 같이 파일을 열 때 접근 방식에 대해 지정 해 주어야합니다.

접근 방식은 C/C++과 매우 비슷합니다.

w는 쓰기전용, r은 읽기전용, a는 파일끝에 덭붙여쓰기(w는 기존파일이 모두 삭제됩니다)

알파벳 뒤에 +를 붙이는 경우 읽기와 쓰기를 모두 사용할 수 있습니다.



2. 파일 쓰기

파이썬에서 파일에 쓰기 위해서는 write() 함수를 사용합니다.

사용법은 다음과 같습니다.


[예제 코드]

file = open("test.txt", 'w') # 파일 열기

file.write("열코의\n") # 파일 쓰기 

file.write("프로그래밍\n") # \n은 줄바꿈

file.write("일기")

file.close() # 파일 닫기


[실행 결과]

열코의

프로그래밍

일기


네.. 정말 간단합니다...

딱히 설명 드릴게 없군요... ㅜㅜ

다음은 파일 읽기에 대해 알아보겠습니다.


3. 파일 읽기

파이썬에서 파일 읽기는 read() 함수와 readline() 함수가 있습니다.

차이점은 read() 함수는 그냥 읽는거고 readline() 함수는 줄단위로 읽습니다.

아래 예제 코드를 살펴보시죠.


[예제 코드]

file = open("test.txt", 'r') # 파일 열기

text = file.read() # 파일 읽기

print(text) # 출력

file.close() # 파일 닫기



[실행 결과]

열코의

프로그래밍

일기


너무 간단하죠? read() 함수를 그냥 하나 툭 쓰기만 하면 EOF(End Of File; 파일의 끝)까지 파일 전체를 읽어서 반환합니다.(세상 편리)

그러면 줄 단위로 읽는 readline() 함수는 사용하지 않는건가요?

그렇지 않습니다.

필요에 따라 파일을 줄 단위로 읽어서 처리할 필요가 있습니다.(속도와 크기 면에서 경제적으로 사용 가능)

또한 read() 함수에 매개변수로 정수형 숫자를 넣어주면 그 크기만큼만 읽어 올 수도 있습니다.


4. 파일 닫기

파일 닫기는 항상 강조했던 부분입니다.

사실 파일을 안 닫아도 실행에 문제가 없을 때가 많지만

여러개의 파일을 동시에 열때에는 심각한 오류가 발생하여 파일안의 내용이 모두 사라지는 경우도 있습니다.

(실제로 겪었습니다...ㅜ)

그래서 파일 사용이 모두 끝난 후 꼭 파일을 닫아줍시다.


file.close()


5. 그 외 함수들...

tell() : 바이트 형식으로 파일의 시작부분에서 현재 파일 객체의 위치를 알려주는 정수형 값을 반환합니다.

seek() : 파일 객체의 위치를 변경합니다.

flush() : 내부 버퍼를 비웁니다. close() 함수 사용시 자동으로 비워집니다.



이상 '파이썬 파일 처리'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.


이번시간에는 파이썬의 랜덤(난수) 클래스에 대해 알아보도록 하겠습니다.

파이썬에서 난수를 생성하기 위해서는 random 모듈을 사용합니다.

프로그래밍을 하면 난수를 생성해야하는 일이 많이 생기는데요. 

이때 random 모듈을 사용하시면 됩니다.


사용법은 간단합니다.

여러가지 상황에 따라 코드로 설명하겠습니다.


① 1부터 10까지 난수 생성

import random

num = random.randrange(1, 11) # 1부터 10 사이의 난수 생성

num2 = random.randrange(1, 11, 2# 1부터 10 사이의 난수(홀수) 생성

print(num) 

print(num2)


random 모듈을 import 해서 추가하고, random.randrange() 함수를 사용하여 간단하게 

난수를 생성할 수 있습니다.

random.randrange() 함수의 매개변수는 첫번째 시작 숫자, 두번째 끝 숫자 + 1입니다.

- 1부터 10까지의 난수를 생성하고자 하면 1, 11을 입력하면 됩니다.

- 5부터 25까지의 난수를 생성하고자 하면 5, 26을 입력하면 됩니다.



세번째 매개변수는 난수들 사이의 간격인데 1부터 10까지 숫자중 2씩 간격을 두면

모두 홀수만 출력되겠죠? 만약 짝수만 출력되게 하고 싶으면 첫번째 매개변수를 짝수로 주면 됩니다.


만약 랜덤 소수가 필요하신 분은 아래와 같이 사용하시면 됩니다.

import random

num = random.random() # 0과 1사이의 임의의 소수

print(num) # 0.8003784774477363 출력


위 코드와 같이 random.random() 함수를 그냥 호출하면 0과 1사이의 임의의 소수가 출력됩니다.

소수점을 제한해서 출력하고 싶으면 print(round(num, 2)) 이렇게 사용하시면 됩니다.


② 이미 정의된 리스트형 자료 섞기(셔플)

import random

myList = [ 1, 2, 3, 4, 5 ]

random.shuffle(myList) # 순서 섞기 (셔플)

print(myList) # [5, 2, 1, 3, 4] 출력


난수를 생성해서 리스트로 만드는 방법도 있겠지만 이미 생성된 리스트가 존재하는 경우?

해당 리스트를 마구잡이로 섞어버리는 함수가 있습니다.

바로 shuffle() 이라는 함수인데요. 대충 보셔도 아시겠지만 셔플은 카드 게임에서도 섞는것을 의미하죠?

random.shuffle() 함수에 리스트를 매개변수로 호출하면 리스트가 뒤죽박죽으로 순서가 바뀝니다.


③ 랜덤으로 하나 선택(초이스)

import random

menu = [ '김치찌개', '된장찌개', '치킨', '피자', '햄버거', '카레', '김밥', '족발', '보쌈', '라면', '초밥',

 '돈까스', '파스타', '닭발', '우동', '오돌뼈', '떡볶이']

dinner = random.choice(menu) # 랜덤으로 하나 선택

print(dinner)


점심 또는 저녁메뉴로 뭘 먹어야 할지 매번 고민인 당신에게

파이썬 random 모듈이 오늘의 식사 메뉴를 직접 선택해주는 프로그램을 만들어보았습니다.

random.choice() 함수는 매개변수로 입력된 리스트 중 랜덤으로 하나를 선택해주는 함수입니다.

menu의 리스트에 메뉴를 더 추가하시고 직접 저녁메뉴를 골라보세요!



④ 랜덤 문자열 생성

또한 문자열 중 랜덤으로 문자를 추출해 랜덤 문자열(임의의 문자열)을 만들어서 

비밀번호 또는 코드로 사용할 수 있습니다.

import random

import string

pw = "".join([random.choice(string.ascii_uppercase) for _ in range(10)]) # 대문자

pw1 = "".join([random.choice(string.ascii_lowercase) for _ in range(10)]) # 소문자

pw2 = "".join([random.choice(string.ascii_letters) for _ in range(10)]) # 섞어서

print(pw) # BAISKPLYXR 출력

print(pw1) # rhgopkcbew 출력

print(pw2) # fdUFmexRKU 출력


⑤ 중복 되지 않는 난수 생성

난수를 생성하여 사용하다보면 중복되는 숫자들이 많은데, 이를 해결하기 위해 간단한 코드를 

삽입하여 해결 가능합니다.

import random


myList = []

num = random.randrange(0, 10)


for i in range(10) :

    while num in myList : # 중복될 경우

        num = random.randrange(0, 10) # 다시 난수 생성

    myList.append(num) # 중복 되지 않은 경우만 추가


# myList.sort() # 정렬이 필요하다면

print(myList)




이상 '파이썬 난수 생성'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.


이번에는 파이썬을 활용하여 지메일(Gmail)로 메일 보내기에 대해 알아보겠습니다.

파이썬에서 메일을 보내기 위해서는 외부 라이브러리가 별도로 필요하지 않으며,

'SMTP lib' 이라는 기본 라이브러리를 제공합니다.

SMTP(Simple Mail Transfer Protocol)이란 인터넷 상의 유효한 이메일 아이디로

이메일을 보내는 데 사용되는 클라이언트입니다.


또한 지메일 외에 다른 메일 서비스도 제공하는데, 이번시간에는 지메일에 대해서만 다루겠습니다.

지메일 계정에서 메일을 보내는 단계는 매우 간단하며,

아래에 소개한 순서대로만 따라오시면 누구나 쉽게 프로그램을 통해 메일을 보낼 수 있을거에요.

(전체 코드는 페이지 맨 아래에 첨부하였습니다.)


자 그럼 시작하겠습니다.

1. 먼저 smtp를 사용하기위해 모듈을 추가해야겠죠?

아래 코드와 같이 추가합니다.

import smtplib

from email.mime.text import MIMEText

smtplib은 SMTP를 사용하기 위한 모듈이고, MIMEText는 메일을 보낼 때 메시지의 제목과 본문을

설정하기 위한 모듈이라고 보시면 되겠습니다.


2. 다음 SMTP 세션을 아래 코드와 같이 설정합니다.

# 세션 생성

s = smtplib.SMTP('smtp.gmail.com', 587)

세션을 만들기 위해 SMTP 인스턴스를 이용하여 SMTP 연결을 캡슐화합니다.

첫번째 매개변수는 지메일을 사용하기 위한 SMTP 변수이며,

두번째 매개변수는 포트번호를 입력합니다. 지메일의 경우 포트번호 587을 사용합니다.


3. 다음 순서로 지메일은 보안상의 이유로 SMTP연결을 TLS(전송 계층 보안) 모드로 설정해야 합니다.

지메일 TLS 보안은 아래 코드와 같이 설정합니다.

# TLS 보안 시작

s.starttls()


4. 그다음 지메일 계정 로그인을 아래 코드와 같이 인증합니다.

# 로그인 인증

s.login('지메일 계정', '앱 비밀번호')

지메일 SMTP의 로그인을 인증하기 위해서는 지메일 계정과 앱 비밀번호가 필요합니다.

지메일 계정은 모두 갖고 계시겠죠? xxxxx@gmail.com < 이런 형식을 입력하시면 됩니다.

그렇다면 앱 비밀번호는 무엇일까요?



단순히 계정 비밀번호를 입력해서는 안됩니다!

또한 지메일 계정을 다른 디바이스에서 사용하기 위해서는 IMAP을 설정해주어야 하는데,

앱 비밀번호 생성 및 IMAP 설정 방법은 아래와 같습니다.


☞ IMAP 설정하는 방법

1. 지메일 계정에 로그인합니다.


2. 우측 상단에 아래 사진과 같이 톱니바퀴 모양의 아이콘을 눌러 설정에 들어갑니다.


3. 상단의 카테고리중 '전달 및 POP/IMAP' 카테고리를 선택하고 IMAP 액세스에서

IMAP 사용을 눌러줍니다.


4. 변경사항 저장을 꼭 눌러줍시다.


※ IMAP을 설정하지 않을 경우 아래와 같은 보안 메일을 받게됩니다.


앱 비밀번호 생성하는 방법

1. 여기에 접속합니다. 접속하시면 아래와 같은 사진이 나옵니다.

앱 비밀번호를 얻기 위해서는 2단계 인증을 완료해야합니다.

2단계 인증을 누르고 사이트에서 시키는 대로 해줍시다...(휴대폰 인증 해줍니다)

2단계 인증이 끝나고 나면 앱 비밀번호를 생성할 수 있는 화면이 위 사진과 같이 나타나게됩니다.


2. 앱 비밀번호 생성하기

본인이 사용하는 프로그램에 대한 앱과 기기를 선택해줍니다.

본 포스트는 파이썬을 활용한 메일보내기 프로그램이기 때문에 

앱은 메일을 선택하고, 기기는 Windows 컴퓨터를 선택해줍니다.

그러면 생성버튼이 활성화 되는데, 생성버튼을 눌러주도록 합니다.



3. 아래 노란색 박스에 앱 비밀번호(16자리)가 생성되면 해당 비밀번호를 복사해서

위 코드에서 로그인 인증부분의 앱 비밀번호에 복사해줍니다.

이로써 IMAP 설정 및 앱 비밀번호 생성이 완료되었습니다.

다시 코드로 돌아갑시다~


5. 메시지 작성

이메일을 보내기 위해서는 메일의 제목과 본문 내용이 필요하겠죠?

아래 코드와 같이 작성하시면 됩니다.

# 보낼 메시지 설정

msg = MIMEText('내용 : 본문내용 테스트입니다.')

msg['Subject'] = '제목 : 메일 보내기 테스트입니다.'


6. 메일을 보내고 세션을 종료합니다.

# 메일 보내기

s.sendmail("보내는 이메일", "받는 이메일", msg.as_string())


# 세션 종료

s.quit()

보내는 이메일에 본인의 지메일 계정을 입력하고, 받는 이메일에 받는 사람의 이메일 계정을 적습니다.

저는 받는 이메일에 제 네이버 메일을 작성했습니다.


자 이로써 모든 코드를 작성했고, 실행버튼을 눌러 실행해봅시다.

로그나 표준입출력을 설정하지 않았기 때문에 따로 오류 코드가 뜨지않는다면

성공적으로 프로그램이 실행된 것입니다.

이제 받는 이메일로 설정된 네이버 이메일로 가보겠습니다.


위 사진과 같이 아주 잘 보내지고 받아지는것을 확인 할 수 있습니다.

아래에 프로그램 전체 코드를 첨부합니다.


import smtplib

from email.mime.text import MIMEText


# 세션 생성

s = smtplib.SMTP('smtp.gmail.com', 587)


# TLS 보안 시작

s.starttls()


# 로그인 인증

s.login('지메일 계정', '앱 비밀번호')


# 보낼 메시지 설정

msg = MIMEText('내용 : 본문내용 테스트입니다.')

msg['Subject'] = '제목 : 메일 보내기 테스트입니다.'


# 메일 보내기

s.sendmail("보내는 이메일", "받는 이메일", msg.as_string())


# 세션 종료

s.quit()


받는 이메일을 wjhv115@naver.com로 설정해서 열코에게 이메일을 보내보세요. ^^

추첨을 통해 티스토리 초대장을 드립니당!





이상 '파이썬 메일보내기'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요. 열코입니다.

파이썬은 간결하고 높은 가독성으로 프로그래머들에게 선호되는 언어 중 하나입니다.

이번 시간에는 파이썬 프로그래머를 위해 최대한 간단한 코딩 방법에 대해 소개합니다.

시작하겠습니다!!


1. 두 변수 값 교환(Swap)

파이썬에서는 별도의 Swap 함수를 제공하는것이 아닌 기본적인 문법으로 제공합니다.

x = 10

y = 20

x, y = y, x


print(x, y) # 20 10 출력


2. 문자열 역순 출력(Reverse, 반전)

파이썬 리스트를 역순으로 출력하는것과 같은 코드와 원리입니다.

str = "열코의 프로그래밍 일기"

str_reverse = str[ : : -1]


print(str_reverse) # 기일 밍래그로프 의코열 출력



3. 리스트 요소를 단일 문자열로 만들기

myList = ["열코", "프로그래밍"]

print(", ".join(myList)) # 열코, 프로그래밍 출력

# " " 안에 문자열을 이용하여 구분지을 수 있습니다.


4. 비교 연산자 2개 사용 

여타 프로그래밍 언어에서 두개 이상의 비교 연산자를 사용할 수 없었습니다.

아래와 같은 코드를 구현하기 위해서는 



if(1 < num && num < 20) 이런식으로 구현했어야 했던것을

파이썬은 아래 코드와 같이 직관적이고 가독성 높은 코드를 사용할 수 있습니다.

num = 10

if 1 < num < 20 :

    print("YES") # YES 출력

else :

    print("NO")


5. 함수의 여러값 반환

기존의 함수에서는 return(반환) 값이 무조건 1개 또는 없었는데 파이썬에서는

값을 여러개를 반환 할 수 있는 기능을 제공합니다.

def x() :

    return 1, 2, 3


a, b, c = x() 

print(a, b, c) # 1 2 3 출력



6. 리스트의 값 여러 변수에 대입

myList = [ 1, 2, 3 ]


x, y, z = myList


print(x, y, z) # 1 2 3 출력


7. import한 모듈의 경로 알아내기

import os


print(os) # <module 'os' from 'C:\\Python\\Python36-32\\lib\\os.py'> 모듈의 경로 출력


8. 중단점 설정을 통해 스크립트 디버깅

import pdb


x = 1 + 2


pdb.set_trace() # 중단점 설정


# > c:\pycharmprojects\untitled2\help.py(7)<module>()

# -> print(x)

# (Pdb) 


print(x)


9. 객체의 메소드 확인

myList = [ 1, 2, 3, 4 ]


print(dir(myList))


# ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__',

# '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', 

# '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', 

# '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', 

# '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 

# 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

# 출력


10. 두개의 튜플로 딕셔너리 만들기

tuple1 = (1, 2, 3)

tuple2 = (10, 20, 30)


dict1 = dict((zip(tuple1, tuple2)))


print(dict1) # {1: 10, 2: 20, 3: 30} 출력




이상 '파이썬 간단하게 코딩하기'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





이번 시간에는 파이썬의 Set 자료형에 대해 알아볼건데요.

Set는 한글로 집합입니다. 중학교 수학시간에 집합이라고 배우죠?

네 맞습니다 바로 그 집합입니다. 실제로 집합이 필요한 상황에서 적절히 

사용할 수 있는 자료형입니다. Set 자료형에는 몇가지 특징이 있는데요.

그 특징은 다음과 같습니다.


♣ Set 자료형의 특징

1. 중복이 없다. (Not Duplication)

2. 순서가 없다. (Unordered)


그렇다면 이제 파이썬에서 Set 자료형을 사용하는 방법에 대해 알아보겠습니다.


♣ Set 자료형의 선언

Set 자료형을 사용하기 위해 다음과 같이 선언할 수 있습니다.

예제 코드)

set1 = set([1, 2, 3]) # {1, 2, 3} 출력

set2 = {4, 5, 6} # {4, 5, 6} 출력

set3 = set("Hello") # {'e', 'H', 'o', 'l'} 출력

set4 = frozenset([1, 2, 3]) # frozenset({1, 2, 3}) 출력

Set 자료형을 선언할 때에는 set([ ]) 또는 { } 기호를 사용하실 수 있습니다.

여기서 set3을 보시면 {'e', 'H', 'o', 'l'}이 출력되는 것을 볼 수 있는데

Set 자료형의 특징을 잘 보여주고 있네요. (중복 및 순서가 없음)

frozenset은 선언 후 변경 할 수 없는 집합입니다. (튜플과 비슷하네요)


♣ Set 자료형의 내부 함수

Set 자료형에도 여러가지 내부 함수가 존재하여 추가 삭제 및 여러가지 연산을 지원합니다.

Set 자료형의 내부함수에는 다음과 같은 함수들이 존재합니다.


- add() : 집합에 요소를 추가합니다.

예제 코드)

set1 = set([1, 2, 3]) # {1, 2, 3} 출력

set1.add(4) # {1, 2, 3, 4} 출력


- update() : 해당 집합에 다른 집합을 추가합니다.

직접 집합을 작성하여 추가하거나 다른 집합을 추가 할 수 있습니다.

예제 코드)

set1 = set([1, 2, 3]) 

set1.update([4, 5, 6]) # {1, 2, 3, 4, 5, 6} 출력

set2 = {7, 8, 9}

set1.update(set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9} 출력


- remove() : 집합에 해당 요소를 제거합니다.

예제 코드)

set1 = set([1, 2, 3])

set1.remove(3) # {1, 2} 출력


- clear() : 집합 내에 모든 요소를 제거합니다.

예제 코드)

set1 = set([1, 2, 3])

set1.clear() # set() 출력(빈 집합)



- union() : 집합들의 합집합을 구합니다. 또한 | 연산자를 사용할 수 있습니다.

예제 코드)

set1 = set([1, 2, 3])

set2 = set([3, 4, 5])


set3 = set1.union(set2) # {1, 2, 3, 4, 5} 출력, set1 | set2 과 같음


- intersection() : 집합들의 교집합을 구합니다. 또한 & 연산자를 사용할 수 있습니다.

예제 코드)

set1 = set([1, 2, 3])

set2 = set([2, 3, 4])

set3 = set([1, 2, 5])


set4 = set1.intersection(set2).intersection(set3) # {2} 출력, set1 & set2 & set3 과 같음


- difference() : 집합들의 차집합을 구합니다. 또한 - 연산자를 사용할 수 있습니다.

예제 코드)

set1 = set([1, 2, 3])

set2 = set([2, 3, 4])


set3 = set1.difference(set2) # {1} 출력, set1 - set2와 같음


이상 '파이썬 set 자료형'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



'Python' 카테고리의 다른 글

파이썬 파일 입출력  (0) 2018.10.06
파이썬 난수(random) 생성  (0) 2018.09.24
파이썬으로 이메일 보내기(SMTP)  (10) 2018.09.22
파이썬 간단하게 코딩하기  (2) 2018.09.19
파이썬 튜플(Tuple) 사용법  (0) 2018.09.16
파이썬 리스트 사용법2 - 활용  (0) 2018.09.15
파이썬 리스트 사용법  (0) 2018.09.14
파이썬 DB연동 - PyMySQL + MySQL  (1) 2018.08.18

to Top