들어가기
읽어들인 파일은 우리가 다양한 방식으로 활용할 수가 있습니다.
기존에 배웠던 여러가지 함수들을 이용한다면 응용할 수 있는 것은 정말 많을 수 있겠죠?
학습목표
텍스트 파일을 읽어온 후 내장 함수를 활용해 특정 문자열의 개수를 알아 낼 수 있다.
핵심 키워드
- open() 함수
- counting
학습하기
들어가기
읽어들인 파일은 우리가 다양한 방식으로 활용할 수가 있습니다.
기존에 배웠던 여러가지 함수들을 이용한다면 응용할 수 있는 것은 정말 많을 수 있겠죠?
학습목표
텍스트 파일을 읽어온 후 내장 함수를 활용해 특정 문자열의 개수를 알아 낼 수 있다.
핵심 키워드
학습하기
학습자료
파일 핸들
파일 핸들(File Handle)은 순서가 있고 연속적으로 구성된 텍스트 파일을 한줄한줄 읽어 나가게 됩니다.
fhand = open('Hamlet.txt')
for line in fhand :
print(line)
# 다음을 출력하게 되면 한줄씩 띄워져서 출력되게 됩니다.
파일의 라인 수 세기
파일의 문장이 몇 줄이 있는지 확인하기 위해서 매우 간단한 방법으로 해결할 수 있습니다.
fhand = open('Hamlet.txt')
count = 0
for line in fhand :
count = count + 1
print('Line Count: ', count)
# Line Count: 35로 출력됩니다.
파일 전체 읽기
우리는 전체 텍스트 파일을 단일한 하나의 문장으로 읽어 들어 올 수도 있습니다. 물론 각 문장에 대한 구분은 개행문자로 구분되어 있습니다.
fhand = open('mbox-short.txt')
inp = fhand.read()
print(len(inp))
# 94646으로 출력됩니다.
print(inp[:20])
# From stephen.marquar으로 출력됩니다.
파일 내용 검색하기
우리는 기존에 배웠던 문자열과 관련된 내장 함수를 활용해서 특정 문자열로 시작하는 문자를 찾을 수 있습니다.
fhand = open('mbox-short.txt')
for line in fhand:
if line.startswith('From:') :
print(line)
# 결과값으로 From: 으로 시작되는 문자열이 출력되게 됩니다.
하지만 결과를 보게 되면 한 줄씩 띄워져 있는 것을 발견할 수 있습니다. 이에 대한 원인은 print()함수로 출력되면서 앞서 말씀드린 것처럼 개행 문자가 계속해서 추가되기 때문입니다. 새로운 라인은 공백으로 인식되기 때문에 해당 부분을 제거 하게 되면 우리는 기본적으로 추가 되어 있던 개행 문자를 삭제 할 수 있습니다. 기억을 떠올려 본다면 문자열의 오른쪽 공백을 제거하는 함수는 rstrip()이었습니다.
fhand = open('mbox-short.txt')
for line in fhand:
line = line.rstrip() # 오른쪽 공백 제거
if line.startswith('From:') :
print(line)
파일 이름 입력 받기
사용자가 파일의 이름을 직접 입력해야 하는 경우도 있을 수 있습니다. 파일명을 적절힌 입력한다면 문제가 없겠지만 잘못된 파일명을 입력했을 때 처리방법을 생각할 필요가 있습니다. 이미 배운 try, except문을 적절히 활용하면 발생할 수 있는 오류 상황을 적절하게 해결 할 수 있을 것입니다.
fname = input('Enter the file name: ')
try:
fhand = open(fname)
except:
print('File cannot be opened: ', fname)
quit()
count = 0
for line in fhand:
if line.startswith('Subject:') :
count = count + 1
print('There were', count, 'subject lines in', fname)
# There were 27 subject lines in mbox-short.txt와 같이 출력됩니다.
comment
fhand = open('Hamlet.txt') #파일명만 쓰고 모드 설정하지 않아도 파이썬의 open 함수는 기본값이 읽기모드.
for line in fhand : # 반복문 통해서 fhand내 내용 한줄씩 순서대로 읽기
print(line)
content = fhand.read()
print(content) # 이 방식도 출력 결과는 같지만 다르다. read 자체가 덩어리로 읽는 성질. 메모리 사용도 높고 파일전체 내용을 한 문자열로 읽음
---------------------------------------------------------------------------
fhand = open('Hamlet.txt') # Hamlet.txt 파일을 연다. 이것만으로는 출력 안됨.
count = 0 # 카운트를 0으로 설정
for line in fhand: # fhand 즉 Hamlet.txt를 한 줄씩 나열
count = count + 1 # 반복문이 실행될 때마다 count에 1을 더한다
print('Line Count: ', count) # 반복문이 실행된 횟수, 즉 줄 수를 출력
# 출력 결과 예시: Line Count: 35
---------------------------------------------------------------------------
fhand = open('mbox-short.txt') # 텍스트 파일 열기
inp = fhand.read() # fhand 내용을 문자열 전체로 읽어옴
print(len(inp)) # inp의 총 문자 수(문자열 길이)를 구함
# 출력: 94646
print(inp[:20]) # inp의 처음부터 20번째 문자 '전'까지 슬라이싱
# 출력: From stephen.marquar
---------------------------------------------------------------------------
fhand = open('mbox-short.txt') # 텍스트 파일 열기
for line in fhand: # 반복문으로 한 줄씩 읽음
line = line.rstrip() # 오른쪽 공백 제거
if line.startswith('From:'): # 해당 줄이 'From:'으로 시작하면
print(line) # 그 줄을 출력
🔹 startswith() 메서드
문자열이 특정 단어로 시작하는지 확인해주는 함수
반환값: True 또는 False
---------------------------------------------------------------------------
fname = input('Enter the file name: ') # 입력문 찾으려는 파일 입력.
try:
fhand = open(fname) #제대로된 파일이 입력되었다면 파일열기
except:
print('File cannot be opened: ', fname)
quit() #제대로 입력되지 않았다면 종료
count = 0 #횟수 카운트 0으로 설정
for line in fhand: #반복문 fhand를 줄별로 출력
if line.startswith('Subject:') : # subject로 시작하는 줄이 있다면
count = count + 1 # 카운트에 1을 더한다
print('There were', count, 'subject lines in', fname) #there were 반복문이 반복된 횟수, subject lines in 파일이름 출력됨
# There were 27 subject lines in mbox-short.txt와 같이 출력됩니다.
어렵다
점점 어려워지지만 잼있네욤. 우리 모두 화이팅~
파이썬에서 중요한 강의를 오늘 듣는군요
비공개 글입니다.
너무 신기하고 재미있습니다!
같이 실행하면서 파일을 읽어보고싶은데, 파일이 먼저 저장이 되어 있어야하는건가요?? 저기 mbox..?
실행이 안돼요 ㅠ
맨 처음에 있는 강의교안을 찬찬히 보면서 따라쳐보고 쭉 훑어보세요 그러고나면 한결 이해가 쉬워집니다.
조금 진행이 빠른 느낌이 있네요 ㅠ 예를 들어주는 코드문이 잘 이해가 안가네요 ㅜㅜ
수강은 완료했는데...7강 진심 뭔 말인지 이해불가네요 ㅠㅠ
20220804 수강완료
0804
Good lecture!