from collections import deque
queue = deque()
print(queue)
queue = deque([10, 5, 12])
print(queue)
# 앞에 넣기
queue.appendleft(1)
print(queue)
# 뒤에 넣기
queue.append(20)
print(queue)
# 이거랑 동일
array = [10, 5, 12]
array.insert(0, 16)
print(array)
# popleft - 앞 삭제
queue = deque([1, 10, 5, 12, 20])
queue.popleft()
print(queue)
# pop - 뒤 삭제
queue = deque([1, 10, 5, 12, 20])
queue.pop()
print(queue)
test.py에 input.txt에 넣어라
python test.py < input.txt
test.py의 결과를 Ouput.txt에 넣어라
python test.py > output.txt
둘다 합치면
python test.py < input.txt > output.txt
python test1.py | python test2.py <input.txt > output.txt
#표준 입출력
sys.stdin > 콘솔
sys.stdout > 콘솔
# standard error
sys.stdeer > 콘솔
(yeardream) c06@c06ui-iMac lecture11 % python test1.py > output.txt
123
Traceback (most recent call last):
File "/Users/c06/Desktop/이어드림/yeardream-DS/Python심화/Lecture11/test1.py", line 12, in <module>
raise NotImplementedError()
NotImplementedError
output.txt에는 아무것도 안 적힌다.
에러만 콘솔에 나타난다
이렇게 하면 에러도 저장 할 수 있다.
(yeardream) c06@c06ui-iMac lecture11 % python test
1.py > output.py 2> log.txt
12345
Log.txt 파일
stderr
fd = open("<파일이름>", "<접근 모드>", encoding = "utf8) # 파일 열기
fd.close()
접근 모드
경로 - 절대 경로-
파이썬의 객체를 일련의 바이트들로 변환한 후 나중에 다시 파이썬 객체로 복원하게 할 수 있는데, 이렇게 파이썬 객체를 일련의 바이트들로 변환하는 것을 직렬화(Serialization)라 하고, 다시 바이트들을 파이썬 객체로 메모리 상에 복원하는 것을 역직렬화(Deserialization)이라 한다. 직렬화된 바이트들은 외부 장치에 저장하거나 다른 시스템으로 전송할 수 있으며, 파이썬을 사용하는 다른 시스템은 (OS와 같은 플랫폼 환경에 상관없이) 다시 이를 파이썬 객체로 역직렬화할 수 있다
test.pkl
import pickle
a = [[(i, j) for i in range (10)] for j in range (10)]
with open("test.pk1", "wb") as fd:
pickle.dump(a, fd) # a를 fd파일에 넣겠다
read.py
import pickle
with open("test.pk1", "rb") as fd:
obj = pickle.load(fd)
print(obj)
(yeardream) pickle/write_in[t.py](http://t.py/)
Traceback (most recent call last):
File "pickle/write_int.py", line 4, in <module>
out = pickle.load(fd)
AttributeError: Can't get attribute 'Complex' on <module '**main**' from 'pickle/write_int.py'>
→ 정의된 대상에 대해서만 피클을 사용할 수 있다
→ Complex() 란 클래스가 정의되지 않은 상태에서 load를 할 수 없다.
import csv
with open("csv/data.csv", "r") as fd:
reader = csv.reader(fd) # 대부분은 여기서 잘된다
for entry in reader:
print(entry)
import csv
with open("csv/output.csv", "w") as fd:
writer = csv.writer(fd)
writer.writerow((1, 2, 3))
writer.writerows([
(0, "나영", "980511"),
(1, "수지", "951211"),
(2, "맹구", "060806")
])
{
"ID" : 4,
"이름" : "조호준",
"소지물" : [
"휴대폰",
123456,
3e-4,
null
]
}
{"ID" : 4,"이름" : "조호준","소지물" : ["휴대폰", 123456,3e-4,null]}
{"ID" : 4,"이름" : "조호준","소지물" : ["휴대폰", 123456,3e-4,null]}
import json
with open('JSON/test.json', "r") as fd:
obj = json.load(fd)
print(obj) # {'ID': 4, '이름': '조호준', '소지물': ['휴대폰', 123456, 0.0003, None]}
print(obj['소지물'][0]) # 휴대폰
import json
obj = {
"ID" : 3,
"소지물" : [
"휴대폰",
4e-3,
12468285,
None,
[]
]
}
with open("output.json", "w") as fd:
json.dump(obj, fd)
<abc>
<소지물 test = asdg>
<asdfwe></asdfwe>
</소지물>
</abc>
설치 pip install pyyaml
test.yaml
nana : "테스트 중 입니다."
id : 4
user:
hojuncho:
sid: 12356
address: 성남시
sanghyunlee:
sid: 58690
address: 서울시
import yaml
with open("yaml/test.yaml", "r") as fd:
data = yaml.load(fd, Loader=yaml.FullLoader)
print(data)
--------------------------------------------------
{'nana': '테스트 중 입니다.', 'id': 4, 'user': {'hojuncho': {'sid': 12356, 'address': '성남시'}, 'sanghyunlee': {'sid': 58690, 'address': '서울시'}}}
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--left', type=int)
args = parser.parse_args()
print(args)
------------------
python argparser.py --left=20 # 값이 l에 담기고 l에 담긴 값을 left로 넘겨준다
Namespace(left=20)
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--left', type=int)
parser.add_argument('-r', '--right', type=int, default=20)
-------------------------------------------------------
(yeardream) c06@c06ui-iMac lecture12 % /opt/homebrew/Caskroom/miniconda/base/envs/ye
ardream/bin/python /Users/c06/Desktop/이어드림/yeardream-DS/Python심화/Lecture12/arg
parser.py
Namespace(left=None, right=20)
(yeardream) c06@c06ui-iMac lecture12 % python argparser.py --left=20 --right=100
Namespace(left=20, right=100)
###############
parser.add_argument('--operation', dest='op', default="sum") # destination 설정 가능
-------------------------------------------------------
(yeardream) c06@c06ui-iMac lecture12 % python argparser.py --left=20 --right=100
Namespace(left=20, right=100, op='sum')
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--left', type=int)
parser.add_argument('-r', '--right', type=int, default=20)
parser.add_argument('--operation', dest='op', default="sum", help="연산자")
args = parser.parse_args()
print(args)
if args.op =='sum':
out = args.left + args.right
elif args.op == 'sub':
out = args.left - args.right
print(out)
-----------------------------------------
(yeardream) c06@c06ui-iMac lecture12 % python argparser.py -l 10 -r 20 --operation=s
ub
Namespace(left=10, right=20, op='sub')
-10
예외가 발생할 수 있는 코드 → (특정 예외 발생시 ) 대응코드 → 계속 진행
try:
<예외발생코드>
except <예외 클래스>:
<대응 코드>
a = 1
assert a == 1
print("문제 없음")
==================
문제 없음
a = 2
assert a == 1, "뭔가 코드에서 잘못된 것이 있는 듯?"
print("문제 없음")
--------------------------------------
AssertionError: 뭔가 코드에서 잘못된 것이 있는 듯?
import logging
import functions
logging.basicConfig(
filename='test.log',
level=logging.INFO
)
logging.debug("디버깅")
logging.info("정보확인")
logging.warning("정보확인")
logging.error("정보확인")
logging.critical("치명적인 에러")
------------
test.log
INFO:root:정보확인
WARNING:root:정보확인
ERROR:root:정보확인
CRITICAL:root:치명적인 에러
WARNING:root:functions에서 호출됨
logger = logging.getLogger("main")
logger.debug("디버깅")
logger.info("정보확인")
logger.warning("정보확인")
logger.error("정보확인")
logger.critical("치명적인 에러")
------------
test.log
INFO:main:정보확인
WARNING:main:정보확인
ERROR:main:정보확인
CRITICAL:main:치명적인 에러
WARNING:root:functions에서 호출됨
functions.py
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.WARNING)
logger.debug("디버깅")
logger.info("정보확인")
logger.warning("정보확인")
logger.error("정보확인")
logger.critical("치명적인 에러")
def log_warning():
logging.warning("functions에서 호출됨")
main.py
import logging
logging.basicConfig(
filename='test.log',
level=logging.INFO
)
logging.debug("디버깅")
logging.info("정보확인")
logging.warning("정보확인")
logging.error("정보확인")
logging.critical("치명적인 에러")
1
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.debug("디버깅")
logger.info("정보확인")
logger.warning("정보확인")
logger.error("정보확인")
logger.critical("치명적인 에러")
import functions
functions.log_warning()
www.regexr.com에서 연습
구현하지 말고 라이브러리가 있는지 찾아보기!
pythonic하게 짤 수 있는 코드가 많다. 다른 사람들은 어떻게 찾았는지 생각해보기