Python🐍 : パッケージ、モジュール📦
클래스, 함수, 변수의 집합
=>모듈, 라이브러리, 패키지...
の関係モジュール
各種변수, 함수, 클래스
を含むファイル.特定の機能は.py
-機能別にコードをモジュールに分割する(ファイル単位)
作成したモジュールを活用したより簡単な開発
モジュールはPythonライブラリのコレクションパスや実行可能ファイルなどのパス内にある必要があります.
Python標準ライブラリ(Python Standard Library,PSL):Pythonに内蔵されているモジュール、パッケージ、および内蔵関数を組み合わせます.
def mod_func1(param1):
print(param1)
def mod_func2(param1):
print(param1)
if __name__ == '__main__': # 프로그램의 시작점일 때만 아래 코드 실행
print('this is main')
import module_ex
module_ex.mod_func1("hi")
## import 모듈 as 모듈에 지정할 이름
## from 모듈 import 변수, 함수, 클래스
from module_ex import mod_func1 - 특정 함수만 가져오는 것도 가능
from module_ex import * - 전부 import
from module_ex import mod_func1 as func, mod_func2 as func2
#import 해제
del module_ex
#다시 import하기
module_ex.reload()
__main__
if __name__ == '__main__'
現在のスクリプトファイルの実行状態を決定します.__name__
は、モジュール名(クラス名)を格納する変数であり、Pythoninterpreter
を使用してスクリプトを実行すると、モジュール名ではなく__main__
が格納されます.したがって、
__name__
に'__main__'
を格納することは、プログラムの開始点に相当する.条件として、コードは、
import되서(모듈로 사용)
ではなく직접 실행(인 프로그램에서 사용)
でのみ実行できます.小包
特定の機能に関連する複数のモジュールを組み合わせて、モジュールにネーミングスペース(名前空間、ディレクトリ)を提供します.
パッケージはモジュールのディレクトリと見なすことができます.
ディレクトリに__init__.py
がある場合、フォルダはパッケージとして認識されます.
ディレクトリ構造であるため、パッケージに他のパッケージが存在する可能性があります.패키지 -> 모듈 -> 클래스, 변수, 함수
間の移動.
パッケージを作成するときに異なるパッケージを使用すると、相互依存性が発生します.
#디렉토리를 패키지로 인식시키면서 패키지를 초기화한다
__all__ = ["mod1"]
#from . import 모듈 : 현재 패키지에서 모듈을 가져오게해서 패키지만 import하더라도 모듈 사용이 가능하다
class Mod1:
def mod1_func(self):
print("mod1 function!")
#__name__을 통해 외부/내부 실행 여부를 확인가능
if __name__ == "__main__":
print("이 모듈이 직접 실행될 때 이 파트 실행됨")
m1 = Mod1()
m1.mod1_func()
else:
print("외부에서 모듈 호출될 때 실행되는 부분")
class Mod2:
def mod2_func(self):
print("mod2 function!")
import package_ex.mod1
m1 = package_ex.mod1.Mod1() #객채생성
#모듈내 클래스를 사용하려면 객채화해야한다.
m1.mod1_func()
from package_ex.mod2 import Mod2
#import 구문에서는 모듈/패키지만 가능하고 클래스에 직접 접근할수 없지만
#from import구문에서는 전부 가능하다.
m2 = Mod2()
m2.mod2_func()
__all__
開発者は、パッケージの作成時に公開される範囲を指定する必要があります.
*
を使用しても、限られた範囲の部分にはアクセスできません.__init__.py
通過__all__
値指定範囲(リスト形式で
__all__
が公開される모듈, 변수, 함수, 클래스
を指定)from package_ex import *
m1 = mod1.Mod1()
m1.mod1_func()
モジュールパッケージの場所の検索
import inspect
import random
print(inspect.getfile(random))#random모듈의 위치
print(inspect.getfile(mod1))
PIP
pip
は、Pythonによって作成されたパッケージを管理するためのプログラムである.pip list
:インストールリスト=pip freezepip show ~
:インストールされたパッケージ情報pip install --upgrade ~
:パッケージのアップグレードpip uninstall ~
:パッケージの削除sudo
:権限エラーの場合、コマンドの前に追加できます.pypi:パッケージを管理するWebサイト
内蔵/外付け関数
import
#input
a=input()
#dir: 객체를 넘겼을 때 객체가 가지는 변수, 함수를 표시
print(dir())
import random #외장 함수
print(dir()) # random이 추가가됨
print(dir(random)) # random이 가지는 함수들이 보여짐
lst=[1,2,3]
print(dir(lst)) # list에 관한 정보를 보여줌
import
でなければ使用できない関数です.#glob : 경로내 폴더 파일 목록 조회 (window dir 명령어와 동일 기능)
import glob
print(glob.glob("*.py")) #확장자가 py인 모든 파일
#os : os가 제공하는 기본 기능들
import os
print(os.getcwd) #현재 디렉토리 확인
#mkdir, 파일삭제 등등
#time : 시간 관련 함수들
import time
print(time.localtime)
print(time.strftime("%Y-%m-%d"))
Excelパッケージ:OpenPyxl📊 `pip install openpyxl` # 설치
`import openxyl` #설치여부 확인
読み取り
Excelの1つのセルには、테두리, 배경색, 값, 폰트 등
さまざまな情報が含まれています.
from openpyxl import load_workbook
wb = load_workbook(엑셀파일명) # 읽어서 클래스로 만듬
data = wb.active #가장 마지막에 활성화되있던 엑셀 정보
# 인덱싱으로 cell 하나 가져오기
data['A1'].value #A1 = 셀 주소
# 행이나 열 가져오기
row = data['2'] #행
col = data['A'] #열
for cell in row or col:
cell.value
# 여러행,열 / 영역 가져오기
# 인덱싱으로 영역이나 열을 가져올 수 있다
area = data['A1:B2']
rows = data['A:B']
cols = data['1:2']
for row in area:
for cell in row:
cell. value
for col in cols:
for cell in col:
cell. value
大規模Excelファイルの読み込み
load_workbook
すべてのExcelのコンテンツを一度に取得
大きすぎると手に入らないか、長い時間がかかります.
必要な部分だけ持っていったほうがいいです.
from openpyxl import load_workbook
wb = load_workbook(엑셀파일명, read_only=True) # 읽기 전용으로 하면 전체가 아니라 가지고 오는 데이터의 종류가 달라진다
data = wb.active
# 읽기 전용으로 가져올 경우 행 단위로 처리해주는 이 함수 사용 권장
for row in data.iter_rows():
for cell in row:
cell.value
# 읽기 전용으로 파일을 가져오면 열단위로 가져올 수 없음
# 읽기 전용으로 새로운 형식을 만드는데 열 단위는 순서가 얽히기 때문에 불가능
書き込み
Excelは1つのファイルに複数のページがあります
いずれかの図面を選択して操作する
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet(시트명) #새로운 시트를 생성
#인덱싱으로 데이터 쓰기
ws['A1'] = 'test' # 인덱싱으로 셀 하나에 데이터 입력
wb.save(저장할 엑셀 파일 명)
# 한번에 여러 개 입력
ws.append(['a','b']) #행단위로 데이터 추가
for i in range(10):
ws.append([i,i+2])
wb.save(저장할 엑셀 파일 명)
電子メール
Eメール送信の原理
smtp 서버 주소
:メールを送信するサーバアドレスpop 서버 주소
:メールを送信するサーバアドレスsmtp 서버 포트
:smtpアドレスに移動するときに書き込むパス番号pop 서버 포트
:popアドレスにジャンプしたときに書き込むパス番号계정 정보
:ID、パスワード
次の手順でEメールを送信します.
サーバに必要なフォーマットでデータを処理する->smtpにログイン->smtpにデータを転送する
電子メールの送信
#이메일에서 요구하는 양식을 완성해줌
from email.mime.text import MineText
from email.mime.multipart import MIMEMultipart
import smtplib
import re # 정규식 관련
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 465
SMTP_USER = '[email protected]'
SMTP_PASSWORD = '1234'
#이메일 전송 함수 정의
def send_mail(name(받는사람 이름), addr(받는사람주소), subject, contents ,attatchment=None): #첨부파일의 기본값 지정
#정규식(문자열을 패턴으로 표시하는 것)으로 이메일 유효성 검사
if not re.match('(^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.]+)',addr):
print('Not email!')
return
msg = MIMEMultipart('alternative') #텍스트 메일을 포함하는 형태라는 뜻
#첨부파일이 있을 경우
if attatchment:
msg = MIMEMultipart('mixed') # 이걸 안써주면 파일 첨부여부를 확인 불가
msg['From'] = SMTP_USER
msg['To'] = addr
msg['Subject'] = name + '님,' + subject
text = MineText(contents,_charset='utf-8')
# 실제 이메일에는 내용, 이미지등 여러가지가 섞여있다
msg.attach(text)#이어 붙이면서 전체 화면을 구성한다
if attatchment:
from email.mime.base import MINEBase
from email import encoders
file_data = MINEBase('application','octect-strean') #일반 파일을 위한 MINEBase클래스 생성
file_data.set_payload(open(attatchment, 'rb')).read())
encoders.encode_base64(file_data)
#파일 명 지정
#attatchment에는 경로 전체가 들어오기 때문에 파일명만 추출한다
import os
fimename = os.path.basename(attatchment)
file_data.add_header('Content-Disposition' , 'attatchment; filename="'+filename+'"')
msg.attach(file_data)
smtp = smtplib.SMTP_SSL(SMTP_SERVER ,SMTP_PORT )
smtp.login(SMTP_USER , SMTP_PASSWORD )
smtp.snedmail(SMTP_USER , addr, msg.as_string())
smtp.close()
# 함수 사용 예시
content = '''
안녕하세요
테스트메일
'''
send_mail('홍길동','[email protected]', '제목',content)
#보안 이슈도 발생할 수 있다 - 앱을 허용해야한다/보안 수준이 낮은 앱
コメントとソース
https://www.youtube.com/watch?v=kWiCuklohdY&ab_channel=%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9~~
https://dojang.io/mod/page/view.php?id=2164
Reference
この問題について(Python🐍 : パッケージ、モジュール📦), 我々は、より多くの情報をここで見つけました
https://velog.io/@trollering12312/Python-패키지-모듈
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
`pip install openpyxl` # 설치
`import openxyl` #설치여부 확인
from openpyxl import load_workbook
wb = load_workbook(엑셀파일명) # 읽어서 클래스로 만듬
data = wb.active #가장 마지막에 활성화되있던 엑셀 정보
# 인덱싱으로 cell 하나 가져오기
data['A1'].value #A1 = 셀 주소
# 행이나 열 가져오기
row = data['2'] #행
col = data['A'] #열
for cell in row or col:
cell.value
# 여러행,열 / 영역 가져오기
# 인덱싱으로 영역이나 열을 가져올 수 있다
area = data['A1:B2']
rows = data['A:B']
cols = data['1:2']
for row in area:
for cell in row:
cell. value
for col in cols:
for cell in col:
cell. value
from openpyxl import load_workbook
wb = load_workbook(엑셀파일명, read_only=True) # 읽기 전용으로 하면 전체가 아니라 가지고 오는 데이터의 종류가 달라진다
data = wb.active
# 읽기 전용으로 가져올 경우 행 단위로 처리해주는 이 함수 사용 권장
for row in data.iter_rows():
for cell in row:
cell.value
# 읽기 전용으로 파일을 가져오면 열단위로 가져올 수 없음
# 읽기 전용으로 새로운 형식을 만드는데 열 단위는 순서가 얽히기 때문에 불가능
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet(시트명) #새로운 시트를 생성
#인덱싱으로 데이터 쓰기
ws['A1'] = 'test' # 인덱싱으로 셀 하나에 데이터 입력
wb.save(저장할 엑셀 파일 명)
# 한번에 여러 개 입력
ws.append(['a','b']) #행단위로 데이터 추가
for i in range(10):
ws.append([i,i+2])
wb.save(저장할 엑셀 파일 명)
Eメール送信の原理
smtp 서버 주소
:メールを送信するサーバアドレスpop 서버 주소
:メールを送信するサーバアドレスsmtp 서버 포트
:smtpアドレスに移動するときに書き込むパス番号pop 서버 포트
:popアドレスにジャンプしたときに書き込むパス番号계정 정보
:ID、パスワード次の手順でEメールを送信します.
サーバに必要なフォーマットでデータを処理する->smtpにログイン->smtpにデータを転送する
電子メールの送信
#이메일에서 요구하는 양식을 완성해줌
from email.mime.text import MineText
from email.mime.multipart import MIMEMultipart
import smtplib
import re # 정규식 관련
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 465
SMTP_USER = '[email protected]'
SMTP_PASSWORD = '1234'
#이메일 전송 함수 정의
def send_mail(name(받는사람 이름), addr(받는사람주소), subject, contents ,attatchment=None): #첨부파일의 기본값 지정
#정규식(문자열을 패턴으로 표시하는 것)으로 이메일 유효성 검사
if not re.match('(^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.]+)',addr):
print('Not email!')
return
msg = MIMEMultipart('alternative') #텍스트 메일을 포함하는 형태라는 뜻
#첨부파일이 있을 경우
if attatchment:
msg = MIMEMultipart('mixed') # 이걸 안써주면 파일 첨부여부를 확인 불가
msg['From'] = SMTP_USER
msg['To'] = addr
msg['Subject'] = name + '님,' + subject
text = MineText(contents,_charset='utf-8')
# 실제 이메일에는 내용, 이미지등 여러가지가 섞여있다
msg.attach(text)#이어 붙이면서 전체 화면을 구성한다
if attatchment:
from email.mime.base import MINEBase
from email import encoders
file_data = MINEBase('application','octect-strean') #일반 파일을 위한 MINEBase클래스 생성
file_data.set_payload(open(attatchment, 'rb')).read())
encoders.encode_base64(file_data)
#파일 명 지정
#attatchment에는 경로 전체가 들어오기 때문에 파일명만 추출한다
import os
fimename = os.path.basename(attatchment)
file_data.add_header('Content-Disposition' , 'attatchment; filename="'+filename+'"')
msg.attach(file_data)
smtp = smtplib.SMTP_SSL(SMTP_SERVER ,SMTP_PORT )
smtp.login(SMTP_USER , SMTP_PASSWORD )
smtp.snedmail(SMTP_USER , addr, msg.as_string())
smtp.close()
# 함수 사용 예시
content = '''
안녕하세요
테스트메일
'''
send_mail('홍길동','[email protected]', '제목',content)
#보안 이슈도 발생할 수 있다 - 앱을 허용해야한다/보안 수준이 낮은 앱
コメントとソース
https://www.youtube.com/watch?v=kWiCuklohdY&ab_channel=%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9~~
https://dojang.io/mod/page/view.php?id=2164
Reference
この問題について(Python🐍 : パッケージ、モジュール📦), 我々は、より多くの情報をここで見つけました https://velog.io/@trollering12312/Python-패키지-모듈テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol