| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- WebSocket
- 1주차
- 프로젝트
- 파이썬
- Class
- 가상환경
- sql
- 알고리즘
- 채팅
- 미니프로젝트
- Commpot
- resnet50
- REDIS
- 2주차
- 장고
- channels
- js
- WIL
- 정보처리기사
- Git
- poetry
- re-id
- 마스킹
- 개발일지
- WHERE절
- github
- 백준
- 정보처리기사실기
- vscode
- 프로그래머스
Archives
- Today
- Total
개발일기
#8 파이썬 심화 (정규표현식, 파일과 디렉토리, csv파일 다루기) 본문
상식으로 알아두기~
1. 정규표현식
- regular expression의 약자인 regex라고도 한다.
- 문자열이 특정 패턴과 일치하는지 판단하는 형식 언어!
- 예를 들어 사용자가 입력한 이메일이 유효한 이메일인지, 휴대폰 번호가 유효한 번호인지 등등 다양한 패턴을 지정하고 검증할 수 있다.
- 직접 정규표현식을 짜는 건 너무 어려운 일이다.
- 이미 만들어져 있는 검증된 정규표현식을 가져다가 쓰도록 하자!
from pprint import pprint
import re
# 정규표현식 사용해서 이메일 검증하기
# ^[\w\.-]+@([\w-]+\.)+[\w-]{2,4}$ : 이메일 검증을 위한 정규표현식 코드
email_regex = re.compile(r"^[\w\.-]+@([\w-]+\.)+[\w-]{2,4}$")
# test = "\n\t"에서 \n.은 개행을 의미하고, \t는 탭을 의미한다.
# test = r"\n\t"을 하면 \n, \t같은 문자를 특수 문자가 아니라 온전히 문자 그대로 사용할 수 있다.
# 즉 앞에 r을 붙이는 이유는 정규표현식에서 특정문자를 특수문자로 인식하는 것을 방지하기 위해 붙인 것이다.
def verify_email(email):
return bool(email_regex.fullmatch(email))
result = [{x: verify_email(x)} for x in test_case] #test_case는 리스트
pprint(result)
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
2. 파일과 디렉토리 다루기
- glob을 활용한 파일 및 디렉토리 목록 확인
- glob을 사용할 때는 import glob를 해줘야한다.
- glob.glob를 쓴 다음에 어떤 경로에 있는 파일들을 볼 건지 적으면 된다.
- 윈도우에서는 기본적으로 경로를 표시할 때 \를 사용하므로 /랑 \가 섞여서 나온다.
- 경로가 /와 \로 섞여서 나온 경우, 만약 이 파일들을 사용한다 하면 replace를 시켜서 통일시키는 것이 안전하다.
- glob는 기본적으로 하위폴더를 탐색하지 않는다.
- 하위폴더까지 탐색하기 원한다면 recursive = "True"를 사용하면 된다.
- *일 때는 recursive 플래그가 True로 설정되어 있다고 하더라도 재귀적으로 돌지 않는다.
- 모든 하위폴더와 파일들을 탐색하고 싶다면 recursive와 **를 같이 사용해야 한다.
- 만약 파이썬 확장자를 가진 파일들만 사용하고 싶다면, (즉 어떤 조건을 만족하는 파일들을 사용하고 싶다면) 별 뒤에 특정 키워드를 적어주면 된다. path = glob.glob("./venv/**/*.py", recursive = True) 이렇게~
import glob
# ./는 현재 python 파일이 위치한 경로를 의미한다.
# *은 "모든 문자가 일치한다" 라는 의미를 가지고 있다.
# ./venv/*은 venv 폴더 내 모든 파일들을 의미한다.
path = glob.glob("./venv/*")
# **은 해당 경로 하위 모든 파일을 의미하며, recursive 플래그와 같이 사용한다.
# recursive를 True로 설정하면 디렉토리 내부의 파일들을 재귀적으로 탐색한다.
path = glob.glob("./venv/**", recursive=True)
# *.py와 같이 작성 시 특정 확장자를 가진 파일들만 볼 수 있다.
# ./venv/**/*.py는 venv 하위 모든 폴더들을 재귀적으로 탐색하며 .py 확장자 파일을 탐색한다.
path = glob.glob("./venv/**/*.py", recursive=True)
- 파일열기는 open을 사용함
- open 뒤에 어떤 파일을 열건지 해당 파일의 경로와 파일이름을 지정해주면 된다.
- 경로없이 파일이름만 쓰게 된다면 실행하는 파이썬 파일의 경로와 똑같은 위치에 파일을 열겠다는 의미
- 그리고 어떤 모드로 열것인지 지정해주면 된다. "w"는 쓰기모드, "r"은 읽기모드, "a"는 추가모드
- 추가모드는 "a" 다음에 파일에 encoding을 지정해줘야한다.
- encoding을 지정하지 않거나 잘못된 encoding을 지정한 경우에는 파일을 읽고 쓸 때 글자가 깨질 수 있다.
- 보통 utf-8로 지정하면 문제가 없다.
- f.write(파일에 원하는 내용을 작성해준다.)
- "w"는 파일에 내용이 있고 없고와 관계없이 처음부터 새로 쓴다.
- "a"는 추가모드이므로 기존내용이 존재한다면 기존 내용을 유지한 채로 새로운 내용을 추가한다.
# "file.txt" : 파이썬에서 사용할 파일을 지정한다.
# encoding : 파일의 encoding 형식을 지정한다.
# case 1. open 함수를 사용해 파일 열기
f = open("file.txt", "w", encoding="utf-8")
f.write("파이썬 파일 쓰기 테스트!\n")
# open 함수를 실행하면 python 스크립트가 끝날때 까지 파일이 열려있게 된다.
# 때문에 파일에 대한 작업이 끝나면 close()를 사용해 파일을 닫아줘야 한다.
f.close()
# python에서는 파일을 편집하거나 생성할 때, with open 문법을 사용할 수 있다.
# open을 with와 같이 사용하면 with 구문이 끝날 때 자동으로 파일이 close 된다.
# 때문에 with를 사용할 떄는 별도로 close 해주지 않아도 된다.
# with open(file) as r : 오픈한 파일이 뒤에 있는 변수 r에 담긴다.
with open("file.txt", "a", encoding="utf-8") as w:
w.write("파이썬 내용 추가 테스트!")
with open("file.txt", "r", encoding="utf-8") as r:
# readlines는 파일의 모든 내용을 list 자료형으로 한번에 읽어들인다.
print(r.readlines())
with open("file.txt", "r", encoding="utf-8") as r:
while True:
# readline은 파일을 한 줄 씩 읽어들인다.
line = r.readline()
# 파일 끝까지 텍스트를 읽어들였다면 반복문을 중지한다.
if not line:
break
# 텍스트의 줄바꿈 문자 제거
line = line.strip()
print(line)
- 파일을 오픈하고 여기저기서 많이 쓰거나 많이 읽어야한다면 오픈변수에 할당하는 방법이 좋다.
- 그러나 잠깐 쓰거나 읽고 끝낼 거라면 with open문법을 사용하는 것이 더 깔끔하기도 하고 휴먼에러로 파일을 클로즈하지 않아서 생기는 이슈를 방지할 수도 있다.
파일 열기 open에서 "w", "r", "a" 이외의 모드를 확인하고 싶다면, 여기서 확인할 수 있다.
https://docs.python.org/ko/3/library/functions.html?highlight=open#open
Built-in Functions
The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-in Functions,,, A, abs(), aiter(), all(), a...
docs.python.org
docs에 보니 open말고도 다양한 문법들의 사용법이 잘 나와있는 것 같다.
구글링을 통해서 블로그에서 확인하는 것보다 docs를 정독하고.. 이해하고.. 자주 들여다보는 것이 개발자에게 좋은 자세라고 한다. 영어도 많고 좀 읽기 싫게 생겼지만, 정확한 정보들이기 때문에 자주 들여다보아야겠다.
3. csv 파일
- csv는 엑셀과 다르게 단순 텍스트다.
- 별다른 툴 없이 텍스트 편집기를 사용해 간단한 csv파일을 만드는 것도 가능하다.
- 단순 텍스트이기 때문에 읽고 쓰는 속도가 빠르다.
- csv_path: csv 파일의 경로를 지정해준다. 경로를 지정하지 않으면 실행되는 파이썬 파일과 동일한 위치에 있는 파일을 찾아간다. 만약 다른 폴더의 파일이라면 앞에 경로를 지정해줘야한다.
- csv_file = open(csv_path, "r", encoding = "utf-8")
일반 텍스트 파일을 읽어들이는 것
# 파이썬에서 csv 파일을 다루기 위해 모듈 import
import csv
csv_path = "sample.csv"
# csv를 list 자료형으로 읽기
# csv_file = open(csv_path, "r", encoding = "utf-8") 일반 텍스트 파일을 읽어들이는 것
# csv_data = csv.reader(csv_file) 읽어들인 파일을 지정하면 그때 데이터를 csv로 읽어들일 수 있다.
# csv.reader함수를 사용하면 리스트 형태로 읽어들인다.
csv_file = open(csv_path, "r", encoding="utf-8")
csv_data = csv.reader(csv_file)
for i in csv_data:
print(i)
# 작업이 끝난 csv 파일을 닫아주기
csv_file.close()
# csv를 dict 자료형으로 읽기
# csv.DictReader함수를 사용하면 딕셔너리 형태로 읽겠다.
csv_file = open(csv_path, "r", encoding="utf-8")
csv_data = csv.DictReader(csv_file)
for i in csv_data:
print(i)
csv_file.close()
# csv 파일을 쓸 때는 newline='' 옵션을 줘서 중간에 공백 라인이 생기는 것을 방지한다.
csv_file = open(csv_path, "a", encoding="utf-8", newline='')
# csv에 데이터를 추가한다.
# csv.writer()을 사용하여 내용 추가, writerow를 사용해서 어떤 내용을 추가할 건지 적기
csv_writer = csv.writer(csv_file)
csv_writer.writerow(["lee@sparta.com", '1989', "lee", "Seoul"])
csv_file.close()
'오늘의 공부일기 > 파이썬 공부일기' 카테고리의 다른 글
| 개인과제) 게임만들기 (4) | 2023.03.28 |
|---|---|
| #9 파이썬 연습 (데코레이터) (0) | 2023.03.24 |
| #8 파이썬 연습 (클래스를 활용하여 게임 만들기) (0) | 2023.03.24 |
| #7 파이썬 연습 (모듈 및 패턴) (0) | 2023.03.23 |
| #6 파이썬 심화 (가상환경, 코드 컨벤션, 변수 유효 범위) (0) | 2023.03.23 |