위의 예제를 차근차근 보자 with open(작성한 파일을 저장할장소/저장할 파일명, ‘w’(작성한다는는 의미), newline=’’) as f:
newline=’’ 이 의미는 이 부분이 없으면 한 줄씩 띄어쓰기로 for문을 순회하면서 데이터가 자동저장된다 하지만 데이터 양이 많을수록 용량도 커지고 쓸데없이 불편할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
1,2,3
4,5,6
7,8,9,
10,11,12
13,14,15
16,17,18
그래서 ‘’빈칸을 넣어서 띄어쓰기를 없애는 것이다 newline=’’을 적용하면 아래와 같이 결과값이 출력된다
writerow()와 writerows()의 차이점
writerow()는 한줄씩 띄어쓰기하여 입력된다 -> for문을 썼기에 순회하면서 전체 내용이 출력되었다.
writerows() 한줄씩이 아닌 전체데이터가 입력된다.(for문 반복없이 한번에 입력)
한줄씩 순회하면서 입력 방법(writerow)와 한꺼번에 전체데이터를 입력하는 방법(writerows)은 각각의 장점이 있다 예시로 회원가입목록에서 1950년생이하는 빼고 데이터를 출력하고싶을때 if조건문으로 필터링을 걸어줘서 writerow이 유용하게 쓰인다
2. 엑셀 쓰기 읽기
엑셀을 처리하는 오픈소스 : openpyxl, xlsxwriter, xlrd, xlwt, xlutils 여러가지 방법이 있지만 pandas를 가장 많이 사용한다 그 이유는 pandas는 최다사용오픈소스인 openpyxl, 랭킹 1위인 xlrd를 내부적으로 만능으로 사용할 수 있기때문이다
pandas를 이용하기 위해서는 아래 3가지를 다운로드해줘야한다 1. pip install xlrd 2. pip install openpyxl 3. pip install pandas
파이썬 인강 : 데이터베이스 연동(SQLite)
SQLite는 기본적으로 설치가 되어있다. 따라서 따로 설치할 필요없이 바로 import하면 된다
try 에러가 발생 할 가능성이 있는 코드 실행 except 에러명1: 에러가 발생하면 여기서 처리(여러 개 가능) except 에러명2: except 에러명3: else: try 블록의 에러가 없을 경우 실행 finally: 항상 실행
이를 활용한 예시
1 2 3 4 5 6 7 8
try: z = 'Kim'# 'Cho' 예외 발생 x = name.index(z) print('{} Found it! {} in name'.format(z, x + 1)) except: # 모든 에러를 처리(Exception) print('Not found it! - Occurred ValueError!') else: print('ok! else!')
<h2> 자신을 4가지 관점으로 정의</h2> <dl> <dt>E</dt> <dd>외향적 : 에너지가 밖으로 흐르며 사람을 만나는 것을 좋아하고 사람을 만남으로써 에너지를 얻는다.<br> 반대성향으로는 I 내향적이 있다. </dd> <dt>N</dt> <dd>직관적 : 숲을 보려는 경향이 있고 아이디어나 육감에 의존하며 주의 초점은 미래와 가능성이다. 따라서 미래지향적으로 새로운 시도를 하는 것을 좋아하며 가능성과 의미를 추구하고 변화와 다양성을 좋아한다<br> 반대성향으로는 S 감각형이 있다. 이는 나무를 보려는 경향으로 실재의 경험, 오감에 주의초점이 있어 현실 수용과 관례를 따르는 결향이 있다. </dd> <dt>F</dt> <dd>감정형 : 주관적 판단에 의존하며 주된 관심주제는 사람, 관계이다<br> 반대성향은 T 사고형이있으며 객관적 판단에 의존하고 주된 관심주제는 사실과 진실이다. </dd> <dt>J</dt> <dd>판단형 : 정리정돈과 계획성이 있다 뚜렷한 기준과 자기의사가 있으며 신속한 결론을 내리고 분명한 목적의식이 있다.<br> 반대성향으로는 P 인식형이 있고 상황에 맞추는 개방성과 목적과 방향의 변화가 상대적으로 쉽다. </dd> </dl> </dl>
글자 관련 태그
1 2 3 4 5 6 7 8
small tag : <small>Make font size smaller </small>
sup tag : <sup>supppp 윗첨자</sup>(ex)300m<sup>2</sup>의 땅이 있었으면 좋겠다
sub tag : <sub>subbbb 아래첨자</sub> (ex)내가 아는 원소기호는 H<sub>2</sub>O
파일을 열때는 open()을 사용하고 읽어올 것이기때문에 r을 쓰면 된다 open()했으면 반드시 close 리소스 반환해줘야한다. 즉 close()로 꼭 문 닫아줘야한다. 한 번 사용한 리소스를 꼭 닫아줘야한다.
1 2 3 4 5
f = open('./resource/중요데이터.txt', 'r') contents = f.read() print(contents)
f.close()
2. with open()방법
파이썬에서는 open()해놓고 close()는 하지않아도 되는 방법이 있다 바로 with문!
1 2 3 4 5
with open('./resource/중요한데이터.txt', 'r') as f: c = f.read() print(iter(c)) #iterator함수로 변환하여 for문에서 사용가능 print(list(c)) #리스트형변환가능 print(c)
read는 전체 내용 읽어준다 ex) read(10) : 10글자 읽기
3. with문과 for문 활용
1 2 3
with open('./resource/중요한데이터.txt', 'r') as f: for c in f: print(c)
출력값을 보면 한 줄씩(line단위) 출력해준다 한줄씩 뛰어쓰기되어 나오는 것은 끝에 |n이 들어가있기때문이다 제거해주려면 어떻게 하면 될까?
1 2 3
with open('./resource/중요한데이터.txt', 'r') as f: for c in f: print(c.strip())
|n을 strip()으로 제거해주면 가독성 좋게 출력된다 위의 출력이미지와 아래의 출력이미지를 보면 가독성이 좋아진 것을 알 수 있다
4. read VS readline VS readline(문자수) VS readlines
read : 처음글자부터 끝까지 전체를 다 읽기. read()가 끝나고 나면 커서가 맨 마지막 글자에 있기때문에 한번 출력 후 read()를 또 출력하면 빈 내용이 출력된다
readline : 한 줄씩 읽기
readline(문자수) : 문자수 읽기
readlines : 전체 읽은 후 라인 단위 리스트 저장
응용한 예시를 함께보자 아래 이미지파일과 같은 score.txt파일이 있고 안의 내용의 평균을 for line in으로 구해보자
1 2 3 4 5 6 7 8 9 10 11
with open('./resource/score.txt', 'r') as f: score = [] for line in f: score.append(int(line)) print(score) print('Average : {:6.3f}'.format(sum(score) / len(score))) #{6자리고 소수셋째자리까지라는 의미}
# 출력값 [95, 78, 92, 89, 100, 66] Average : 86.7
5. 파일 쓰기
빌트인패키지인 random을 이용해서 파일을 써보자 로또번호와 비슷하게 6개 랜덤번호를 출력하는 예제이다.
1 2 3 4 5 6 7
from random import randint #랜덤파일로부터 randint함수를 가져와라는 뜻
with open('test2.txt', 'w') as f: for cnt in range(6): # range(6)은 0~5까지임. f.write(str(randint(1, 50))) # 1부터50까지 f.write('\n')
writelines : 리스트 -> 파일로 저장
1 2 3
with open('test3.txt', 'w') as f: list = ['Kim\n', 'Park\n', 'Lee\n'] f.writelines(list)
print로 바로 저장하는 예제이다
1 2 3
with open('./resource/test3.txt', 'w') as f: print('Test Contents!', file=f) print('Test Contents!!', file=f)
loginbtn.addEventListener('click', ()=>{ let id = document.getElementById('id').value; let pw = document.getElementById('pw').value; console.log(id, pw)
//1. 선언 import java.util.Scanner; // import라는 예약어는 // 단축키는 ctrl + shift + O 누르면 자동으로 import 생성됨
Scanner sc = new Scanner(System.in); // 의미는 나는 이제부터 스캐너라이브러리를 변수명(ex: sc)이라는 이름으로 불러서 사용하겠다는 의미 // System.in 자바의 표준입력으로 키보드를 의미한다. 즉 키보드로부터 데이터를 받아오겠다라는 의미
System.out.println("단어를 입력하세요");
//2. 변수 s에 저장 String s = sc.next(); // 콘솔창에 입력한 것들이 변수 s에 저장된다.
//3. 출력 System.out.println(s);
//4. 예시 System.out.println("이름을 입력해주세요"); String s = sc.next(); System.out.println("연락처를 -없이 입력해주세요"); int i = sc.nextInt(); System.out.println("입력하신 "+ s +"님의 휴대폰번호 0"+ i +" 가 맞습니까?");
다른 명령어들은 아래와 같다
1 2 3 4 5 6 7 8
sc.nextInt() //키보드로부터 정수데이터를 가지고 옴
sc.next() //키보드로부터 string(한단어)를 가지고 옴
sc.nextLine() //키보드로부터 string(공백을 포함한 한줄전체)를 가지고 옴
2. Scanner 라이브러리를 이용한 사칙연산계산기 만들기
처음 떠오른 코드는 아래와 같다.
1 2 3 4 5 6 7 8
Scanner sc = new Scanner(System.in); System.out.println("원하는 사칙연산 수식을 입력하세요"); int data1 = sc.nextInt(); String operator = sc.next(); int convertOper = int(operator); int data2= sc.nextInt();
정수식안에는 변수, 숫자, 문자, 조건들이 들어갈 수 있다. case안의 값에는 and연산자, Boolean, 실수는 아예 들어갈 수 없다. break;문이 없을 경우 다음 break;를 찾을때까지 모든 문장을 실행한다. default문은 가장 마지막 작업으로 위의 case 이외의 값인 경우 default문은이 출력되고 Switch문은 끝난다
1 2 3 4 5 6 7 8 9
switch( 정수식 ){ //숫자,문자 case 값 : 출력값1; break; case 값 : 출력값2; break; case 값 : 출력값3; break; default : 출력값4; }
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
switch(season){ case"spring" : System.out.println("봄 사랑 벚꽃 말고 by 아이유"); break; case"summner" : System.out.println("party by 소녀시대"); break; case"autumn" : case"fall" : System.out.println("11:11 by 태연"); break; case"winter" : System.out.println("Santa tell me by Ariana grande"); break;
from + import + as 조합 권장하는 방법으로 모듈의 많은 함수들 중에서 필요한 함수만 가져와서 쓸수있다 어떠한 언어를 다루던 리소스를 낭비하지 않도록 명확히 코딩하는 것이 좋다
1 2 3 4 5 6
from pkg.calculations import div as d
print("ex5 : ", int(d(100,10)))
# 출력값은 ex5 : 10
3. builtins(빌트인)
1 2 3
import builtins
print(dir(builtins))
출력값이 너무 길어서 이미지파일로 준비했다
우리가 빌트인인지 모르고 사용했던 list함수, type함수등이 들어가 있는 것을 확인할 수 있다
4. __init__.py의 필요성
용도 : 해당 디렉토리가 패키지임을 선언할 때 사용한다. Python 2.x대를 사용하고 있다면 __init__.py가 필수이다 Python3.x : 파일이 없어도 패키지 인식하지만 3.x보다 하위 버전 호환 위해서 생성하는 것이 안전
5. 단위테스트
독립적으로 만든 파일이 독립적으로 잘 실행되는지는 확인하기 위해서 아래 if name문을 써준다 아래 형태로 쓰도록 딱 정해놓았다. 만든함수()부분에 만들었던 함수들을 넣어 독립적으로 실행되는지 체크할 수 있다 if문이기때문에 import으로 가져온 파일에서는 출력이 안된다 GOOD!
1 2 3 4 5
# 단위 실행(독립적으로 파일 실행) if __name__ == "__main__": print("This is", dir()) 만든함수() 만든함수()