//파일 컨트롤
test_string="""\
AAA
BBB
CCC
DDD
"""
#------------------------- 파일 쓰기---------------------------------#
with open('test.txt','w') as f: #text 파일을 생성하고 로드하라. 없으면 생성!
f.write(test_string) #텍스트 파일 안에 내용 입력(위의 테스트 스트링 쓰기)
"""
<print로 텍스트 파일에 write하는 방법>
# 콘솔에 찍히는게 아니라, 텍스트 파일에 글을 쓰는 다른 방법이다(file f가 붙으면 텍스트 파일에 프린트 하겠다는 뜻)
print('I am print',file=f)
# -> My#name#is#Mike! 을 텍스트 파일에 추가
print('My','name','is','Mike',sep='#',end='!',file=f)
"""
#------------------------- 파일 읽기---------------------------------#
with open('test.txt','r') as f:
# print(f.read()) #텍스트 전체 읽기
while True:
line = f.readline()
print(line) #print를 하면 줄바꿈을 알아서 해준다
if not line:
break
#------------------------- 파일 읽고 쓰기----------------------------#
with open('test.txt','w+') as f: #w+는 읽고 쓰기가 둘다 가능하다는 뜻(무조건 처음에 써야지 읽기도 가능,먼저읽기불가능)
f.write(test_string)
f.seek(0) #파일을 다 쓰고난 후에 제일 처음 으로 돌아가서
print(f.read()) #읽는다
with open('test.txt','r+') as f: #r+는 읽고 쓰기가 둘다 가능하다는 뜻(text.txt파일이 있을때는 먼저 읽을수있음)
print(f.read()) #읽는다
f.seek(0) #파일을 다 쓰고난 후에 제일 처음 으로 돌아가서
f.write(test_string)
===============================================================================
//csv 컨트롤
import csv
#----------------csv 쓰기(엑셀 만들기)---------------------#
# with open('test.csv','w') as csv_fi: ->맥은 이렇게
with open('test.csv','w',newline="") as csv_file:
fieldnames = ['Name','Count']
writer = csv.DictWriter(csv_file,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Name':'A','Count':1})
writer.writerow({'Name':'B','Count': 2})
#----------------csv 쓰기(엑셀 읽기)---------------------#
with open('test.csv','r') as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
print(row['Name'],row['Count'])
===============================================================================
//os 컨트롤
import os
import pathlib
import glob
import shutil
print(os.path.exists('test.txt')) # True.(test.txt가 있습니까?)
print(os.path.isfile('test.txt')) # True.(test.txt는 파일입니까?)
print(os.path.isdir('test.txt')) # False.(test.txt는 폴더입니까?)
os.rename('test.txt','renamed.txt') # test.txt 이름 변경
os.symlink('renamed.txt','symlink.txt') #renamed.txt를 복사하고, 둘을 연결
#renamed.txt를 병경하면 symlink.txt도 자동변경된다.
os.mkdir('test_dir') #test_dir이란 폴더를 만들어주세요
os.rmdir('test_dir') #test_dir이란 폴더를 지워주세요
pathlib.Path('empty.txt').touch() #empty.txt파일을 만들어주세요
os.remove('empty.txt') #empty.txt파일을 지워주세요
os.mkdir('test_dir')
os.mkdir('test_dir/test_dir2')
print(os.listdir('test_dir')) #[test_dir2] test_dir폴더안에는 어떤게 있습니까
pathlib.Path('test_dir/test_dir2/empty.txt').touch()
print(glob.glob('test_dir/test_dir2/*'))#test_dir2안에 있는 것들을 전부 보여주세요
shutil.copy('test_dir/test_dir2/empty.txt',
'test_dir/test_dir2/empty2.txt') #파일 복사하기
shutil.rmtree('test_dir') #test_dir폴더를 삭제해주세요
print(os.getcwd()) #현재 파이썬폴더의 디렉터리를 알려주세요
===============================================================================
// datetime
import datetime
now = datetime.datetime.now()
print(now) # 2020-02-17 11:42:14.088238
print(now.isoformat()) # 2020-02-17T11:42:14.088238 ->iso 국제규격
print(now.strftime('%d/%m/%y-%H%M%S')) #17/02/20-114415
today = datetime.date.today()
print(today) #2020-02-17
print(today.strftime('%d/%m/%y')) #17/02/20
print(now) #2020-02-17 11:48:41.991667
d = datetime.timedelta(weeks=-1)
print(now + d) #2020-02-10 11:48:41.991667 (1주일 전)
print(now - d) #2020-02-24 11:49:18.742851 (1주일 후)
"""
d = datetime.timedelta(weeks=-1) 1주일전
d = datetime.timedelta(days=-1) 하루전
d = datetime.timedelta(days=-365) 일년전
d = datetime.timedelta(hours=-1) 한시간 전
d = datetime.timedelta(minutes=-1) 1분전
d = datetime.timedelta(second=-1) 1초전
"""
import time
print('#####')
time.sleep(2) #2초뒤에 다음함수를 실행해주세요!마치 코루틴
print('#####')
#백업파일 만들기
import os
import shutil
#text.txt
file_name = 'test.txt'
#테스트용 test.txt 파일을 만든다!
with open(file_name,'w') as f :
f.write('test')
#test.txt파일이 있다면 날짜 함수를 이용해 백업파일을 만든다
if os.path.exists(file_name):
shutil.copy(file_name,"{}{}".format(file_name
,now.strftime('%Y_%m_%d')))
===============================================================================
// collection.namedtuple
import csv
import collections
p = (10,20)
print(p[0]) #10
# p[0] = 100 ->10(튜플은 읽기전용이다)
Point = collections.namedtuple('Title','x , y')
p = Point(10,y=20) #namedtuple로 만든 Point는 클래스처럼 사용가능
print(p) #Title(x=10, y=20)
print(p.x) #10
#p.x=100 ->값을 못넣는다!.즉, namedtuple은 튜플처럼 값을 못넣는 클래스를 간단하게 만들어주는 라이브러리!!!!!
p1 = Point._make([100,200]) #_make -> []형을 튜플화 해준다(namedtuple에서만 사용)
print(p1) #Title(x=100, y=200)
print(p1._asdict()) #OrderedDict([('x', 100), ('y', 200)])
p1._replace(x=500)
print(p1) #Title(x=100, y=200)->replace로 해서 p1이 변경된것은 아니다!!!!
p2 = p1._replace(x=500)
print(p2) #Title(x=500, y=200)->replace는 p1의 오브젝트를 값을 바꿔서 쉽게 복사할때 사용한다.
#-----------------------------------#
class SumPoint(collections.namedtuple('Point',['x','y'])):
@property
def total(self):
return self.x + self.y
p3 = SumPoint(2,3)
print(p3.x , p3.y , p3.total) # 2 3 5
#-----------------------------------#
with open('names.csv' , 'w' , newline="") as csvfile:
fieldnames = ['first','last','address']
writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first':'Mike' , 'last':'Jackson' , 'address':'A'})
writer.writerow({'first':'Jun' , 'last':'Sakai' , 'address':'B'})
writer.writerow({'first':'Nancy' , 'last':'Mask' , 'address':'C'})
with open('names.csv','r') as f:
csv_reader = csv.reader(f)
print('csv_reader : ',csv_reader) #csv_reader : <_csv.reader object at 0x0000028871645978>
print('next(csv_reader) : ',next(csv_reader)) #next(csv_reader) : ['first', 'last', 'address']
for row in csv_reader:
print(row)
"""
['first', 'last', 'address']
['Mike', 'Jackson', 'A']
['Jun', 'Sakai', 'B']
['Nancy', 'Mask', 'C']
"""
with open('names.csv','r') as f:
csv_reader = csv.reader(f)
Names = collections.namedtuple('Names', next(csv_reader))
for row in csv_reader:
names = Names._make(row)
print(names.first, names.last, names.address)
"""
Mike Jackson A
Jun Sakai B
Nancy Mask C
"""
===============================================================================
// collection.OrderedDict
import collections
#사전형의 순서를 무조건 지키고 싶을때 사용한다.
#OrderedDict를 사용하지 않아도 지켜지기는 하지만, 어느 상황에서는 완벽히 지켜지지 않을 때도 있다.
d = collections.OrderedDict({'banana' : 3, 'apple' : 4, 'pear' : 1, 'orange' : 2})
#출력 : OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
print(d)