매일공부

[PY4E] 파이썬 파일; open() read() 본문

Programming/Python

[PY4E] 파이썬 파일; open() read()

aram 2022. 7. 10. 20:42

1. 파일 열기

- 핸들 = open(파일명, 모드) : 파이썬에게 작업할 파일과 파일로 어떤 작업을 할지 알려줌

  fhand = open('mbox.txt', 'r')

- open() : handle 반환

   > handle은 파일에 접근하는 창구(파일에 대한 작업 수행)

   > 다른 방식으로 저장되어 있는 텍스트를 처리하는 하나의 표준화된 방식

   > 많은 양의 문자 파일을 한꺼번에 읽어 발생할 수 있는 성능 문제 방지(점진적 읽기)

- 파일명 : 문자열

- 모드 : 매개변수는 선택사항 

   > 'r' 파일 읽기 

   > 'w' 파일 쓰기

 

- 파일 열기 오류

>>> fh = open('mbox-short.txt', 'r')
>>> print(fh)
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

> 파일 위치의 문제

> 관리자모드가 아니라서 권한이 없어서 그런 것으로 추측됨

> c드라이브 처음이나 d드라이브로 폴더 및 파일 위치를 바꾸면 해결 완료 = cmder 설치랑 같음

 

 

2. 개행문자 \n

- 각 줄이 끝났음을 알림 >> 줄 바꿈

- 두 글자가 아닌 한 글자임(빈공간의 일부라고 생각해도 무방)

>>> stuff = 'X\nY' 
>>> print(stuff)
X
Y
>>> len(stuff) 
3
#X하나 / \n하나 / Y하나

 

3. 시퀀스로써 파일 핸들

- 읽기용의 파일 핸들 : 파일의 각 줄에 대한 문자열의 시퀀스

- 시퀀스 = 정렬된 집합

- for문을 이용하여 각 줄 읽기

#한줄씩 띄워서 출력
xfile = open('mbox.txt') 
for line in xfile:
	print(line)

#한 줄씩 파일 줄 세기
fhand = open('mbox.txt') 
count = 0 
for line in fhand:
	count = count + 1
print('Line Count:', count)

$ python open.py 
Line Count: 132045

 

4. 파일 전체 읽기 read()

- 너무 많은 파일을 한번에 읽을 경우 성능 문제 주의

>>> fhand = open('mbox-short.txt') 
>>> inp = fhand.read() 
>>> print(len(inp)) 
94626

>>> print(inp[:20]) 
From stephen.marquar

 

5. 파일 내용 탐색

- for문에 조건 걸기 > 원하는 줄만 출력

>>> fhand = open('mbox-short.txt') 
>>> for line in fhand:
... 	if line.startswith('From:') :
... 		print(line)

# From:시작하는 모든 열 출력됨
From: stephen.marquard@uct.ac.za

From: louis@media.berkeley.edu

☞ 기존 파일의 각 줄 끝에는 개행문자 존재 > print 구문이 각 줄에 개행 문가 추가로 더 함

 

- 공백제거 > rstrip() 사용

>>> fhand = open('mbox-short.txt') 
>>> for line in fhand:
...	line = line.rstrip() #오른쪽 공백 제거
... 	if line.startswith('From:') :
... 		print(line)

From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
#print로 인한 줄바꿈만 존재

 

- 파일 이름 입력 받기

: 파일 이름 오류 났을 경우를 대비해 try/except 추가

: 한 줄씩 실행하면서 나타냄

>>> fn = input('Enter a file name: ')
>>> try:
...     fo = open(fn)
>>> except:
...     print('File cannot be opened: ', fn)    
...     quit()
>>> print(fo)
<_io.TextIOWrapper name='mbox-short.txt' mode='r' encoding='cp949'>

>>> for line in fo:
...     sline = line.rstrip()
...     print(sline.upper())
FROM STEPHEN.MARQUARD@UCT.AC.ZA SAT JAN  5 09:14:16 2008
RETURN-PATH: <POSTMASTER@COLLAB.SAKAIPROJECT.ORG>
RECEIVED: FROM MURDER (MAIL.UMICH.EDU [141.211.14.90])
         BY FRANKENSTEIN.MAIL.UMICH.EDU (CYRUS V2.3.8) WITH LMTPA;
         SAT, 05 JAN 2008 09:14:16 -0500

 

 

 

 

728x90
Comments