"기록이 없으면 역사도 없고 자신의 세계도 없다. 이것이 군중 속에서 군중으로 흔적 없이 매몰되는 자신을 잊지 않는 일이다." <구본형>
read()readlines()readline()# 파일 읽기 관련 함수
try:
# (1) read(): 전체 텍스트 자료 읽기
ftest = open('data/ftest.txt', mode='r')
full_text = ftest.read()
print(full_text)
print(type(full_text))
# (2) readlines(): 전체 텍스트 줄 단위 읽기
ftest = open('data/ftest.txt', mode='r')
lines = ftest.readlines() # list 반환
print(lines)
print(type(lines)) # <class 'list>
print('문단 수:', len(lines))
# (3) list -> 문장 추출
docs = [] # 문장 저장
for line in lines:
print(line.strip()) # text만 출력
docs.append(line.strip())
print(docs)
# (4) readline(): 한 줄 읽기
ftest = open('data/ftest.txt', mode='r')
line = ftest.readline()
print(line)
print(type(line)) # <class 'str>
except Exception as e:
print('Error 발생:', e)
finally:
# 파일 객체 닫기
ftest.close()
(1) read(): 전체 텍스트 자료 읽기
(2) readlines(): 전체 텍스트 줄 단위 읽기
(3) list -> 문장 추출
\n) 이스케이프 문자가 포함strip() 함수를 이용하여 x변수의 문자열 끝 부분에 오는 \n, 공백, \t, \r 등의 이스케이프 문자 제거x = "sgat3sgaga\n \t\r"
print(x.strip())
# 실행 결과
# sgat3sgaga
(4) readline(): 한 줄 읽기
for i in range(6):
line = ftest.readline()
print(line.strip())
with open(file, mode, encoding) as 참조변수:
pass
try:
with open('data/ftest3.txt', mode='w', encoding='utf-8') as ftest:
ftest.write('파이썬 파일 작성 연습')
ftest.write('파이썬 파일 작성 연습2')
# with 블록 벗어나면 자동 close
with open('data/ftest3.txt', mode='r', encoding='utf-8') as ftest:
print(ftest.read())
except Exception as e:
print('Error 발생:', e)
finally:
pass
os, glob 모듈os.getcwd()os.mkdir(path)os.rmdir(path)f.readlines()를 호출하면 파일 전체를 한 번에 읽어서 리스트로 반환함f.read()를 호출하면, 이미 파일 끝에 있으므로 읽을 내용이 없어서 빈 문자열이 반환되니 주의f = open("test.txt", mode='r')
# 파일 전체를 읽어서 리스트로 반환, 포인터는 EOF로 이동
f_readlines = f.readlines()
# 이 시점에 f.read()를 호출하면, 읽을 내용이 없음
print(f.read()) # 빈 문자열 출력
f.seek(0)을 사용해서 파일 포인터를 파일의 처음으로 옮길 수 있음f = open("test.txt", mode='r')
f_readlines = f.readlines()
# 파일 포인터를 처음으로 이동
f.seek(0)
print(f.read()) # 이제 전체 내용이 출력됨
f.readlines()와 f.read()를 각각 새로 연 파일에서 사용해도 됨f.readlines()나 f.read()는 파일 포인터를 EOF로 이동시킴read()는 빈 문자열을 반환seek(0)으로 이동시키면 다시 읽을 수 있음파일을 다 읽고 나면 포인터가 끝에 가 있으니,
다시 읽으려면 항상 포인터를 처음으로 되돌려야 한다는 점을 기억하세요!
dir/p *.*
UNIX → LINUX → CPM → DoS 운영체제
UNIX의 프로그래밍 언어가 C
: C 언어는 유닉스 운영체제의 핵심 부분을 구현하는 데 사용되었고, 유닉스는 C 언어를 대표하는 운영체제임


findall('^test', st2)^test : test로 시작하는 문자열\)로 시작하는 이스케이프 문자를 이용하여 정규표현식의 메타문자로 사용할 수 있음
re 모듈
[ *\$ ]
findall() 함수
[])로 반환형식
import re
re.findall(pattern, string[, flags=0])
[ ]: 생략 가능의 뜻
※ 인수와 매개변수 차이
: 함수를 호출하는 곳이면 인수, 함수를 정의하는 곳이면 매개변수
import re # 모듈 추가 - 방법1
from re import findall # 모듈 추가 - 방법2
st1 = "1234 abc흥길동 ABC_555_6 이사도시"
# (1) 숫자 찾기
print(findall("1234", st1))
print(findall("[0-9]", st1))
print(findall("[0-9]{3}", st1))
print(findall("[0-9]{3,}", st1))
print(findall("\\d{3,}", st1))
# (2) 문자열 찾기
print(findall("[가-힣]{3,}", st1))
print(findall("[a-z]{3}", st1))
print(findall("[a-z|A-Z]{3}", st1))
# (3) 특정 위치의 문자열 찾기
st2 = "test1abcABC 123mbc 45test"
# 접두어/접미어
print(findall("^test", st2)) # 접두어
print(findall("st$", st2)) # 접미어
# 종료 문자 찾기: abc, mbc
print(findall(".bc", st2))
# 시작 문자 찾기
print(findall("t.", st2))
# (4) 단어 찾기(\\w) - 한글+영문+숫자
st3 = "test^홍길동 abc 대한*민국 123$tbc"
words = findall("\\w{3,}", st3)
print(words)
# (5) 문자열 제외: x+(x가 1개 이상 반복)
print(findall("[^^*$]+", st3)) # 특수문자 제외
(1) 숫자 찾기
[0-9]: 숫자 1개와 일치되는 패턴\\d로도 쓸 수 있음[0-9] {3}: 숫자가 3개 연속된 패턴{}: 반복을 의미하는 {} 메타문자[0-9] {3,}: 숫자가 3개 이상 연속된 경우(2) 문자열 찾기
[가-휠J{3,}: 한글 3자 이상 연속된 패턴[a-z|A-Z]{3}: 영문 소문자 또는 대문자가 3개 연속된 패턴(3) 특정 위치의 문자열 찾기
^test: 메타문자 ^ 이용해 문자열에서 접두어 test 찾는 방법st$: 메타문자 $ 이용해 문자열의 접미어 st 찾는 방법.bc: 메타문자 . 이용해 3개 문자로 구성된 문자열 중 bc로 끝나는 문자열 찾는 패턴.: 문자 1개를 받을 수 있는 와일드카드 역할(4) 단어 찾기(\\w)
\\w: 단어(word)를 인식하는 메타문자로 사용됨\\w{3,}: 한글, 영문자, 숫자 중 하나가 3개 이상 연속된 것을 단어로 찾기 위한 패턴(5) 문자열 제외([^])
[^^*$]+: [^], + 메타문자를 이용하여 특수문자(^, *, $)를 문자열에서 제거하는 패턴[^] 메타문자: ^ 다음에 오는 문자를 제외시키는 역할+: 기호 앞에 오는 문자가 1개 이상 연속되는 패턴의 의미파이썬에서 단어 문자에 포함되는 것
영문자: a-z, A-Z
숫자: 0-9
언더스코어: _
한글: 가-힣
단어 문자에 포함되지 않는 것
공백:
특수문자:!@#$%^^&*()-+=[]{}|;:'"<>,.?/
기타: 탭, 줄바꿈 등
따라서\\w패턴에서 인식하는 것은 '단어 문자'만 →*는 단어 문자가 아닌 그냥 문자
match()
형식
import re
re.match(pattern,string[, flags=0])
from re import match # re 모듈 import
# (1) 패턴과 일치된 경우
jumin = "123456-3234567"
result = match("[0-9]{6}-[1-4][0-9]{6}", jumin)
print(result) # re.Match object
if result: # object
print("주민번호 일치")
else: # null
print("잘못된 주민번호")
# (2) 패턴과 불일치된 경우
jumin = "123456-5234567"
result = match("[0-9]{6}-[1-4][0-9]{6}", jumin)
print(result) # None
if result: # object
print("주민번호 일치")
else: # null
print("잘못된 주민번호")
(1) 패턴과 일치된 경우
[0-9]{6}-[1-4][0-9]{6}-)을 기준으로 앞부분 6자리 숫자,하이픈(-) 다음에 오는 성별 1자리 숫자, 그리고 나머지 6개의 숫자를 메타문자를 이용해 정규 표현식으로 지정(2) 패턴과 불일치된 경우