본문 바로가기
Python/PY4E

PY4E Chapter 7. Files

by 전자여우 2022. 8. 7.

1. 파일 열기 open()

파일을 읽는 경우 파일에 영향을 끼치지 않는다.

쓰기 모드가 경우 내용을 없애고 새로 쓸 수 있다.

fhand = open('filename', 'mode') # mode에는 읽기(r), 쓰기(w) 등이 들어간다. 비워두면 읽기모드로 열린다.

print(fhand) # 파일 내용이 아닌 파일명, 모드, 인코딩과 같은 정보를 출력해준다.

 

2. 개행 문자 (The newline Character)

문자열에서 줄 바꿈을 표시해주는 문자이다. \n으로 표기하며, 하나의 문자로 취급한다.

# 개행문자 \n
print('Hello\nworld!')

# Hello
# world!

 

3. 파일을 읽는 과정 (File Processing)

파일을 일련의 줄로 생각할 수 있으며 일반적으로 그 줄을 한 번에 한 줄씩 읽게 된다.

파일을 읽을 때 가장 일반적으로 쓰이는 방법은 파일을 여러 줄의 문장으로 보고 for문을 이용하여 파일을 읽는 것이다.

open() 함수로 파일을 연 뒤, 그것을 변수에 저장한다. 그리고 for문의 반복 변수를 통해 각 줄을 차례로 받는다.

xfile = open('mbox.txt') # open() 함수로 파일을 연 뒤, xfile 변수에 저장한다.
for cheese in xfile: # for문을 통해 한 줄 한 줄 읽어들인다.
	print(cheese) # for 루프가 반복됨에 따라 파일의 내용이 순차적으로 출력된다.

 

4. 활용

# 파일이 몇 줄인지 세기
fhand = open('mbox-txt')
count = 0
for line in fhand:
	count = count + 1
print('Line Count: ', count)

# 파일 내의 전체 글자수 세기
fhand = open('mbox-short.txt')
inp = fhand.read()
print(len(inp))

# 특정 문자열로 시작하는 줄 찾아 출력하기
fhand = open('mbox.txt')
for line in fhand:
	if line.startswith('From:'): # From:으로 시작하는 줄 찾기
    	print(line)

# 출력 시 빈 줄이 있는 경우
fhand = open('mbox.txt')
for line in fhand:
	line = line.rstrip()
	if line.startswith('From:'): # From:으로 시작하는 줄 찾기
    	print(line)

# 출력 대신 반환하기
fhand = open('mbox.txt')
for line in fhand:
	if not line.startswith('From:'): # From:으로 시작하는 줄이 아니면
    	continue # 스킵
    print(line) # 반환받은 값을 출력
    
# 사용자에게 파일을 입력값으로 받아내기
fname = input('Enter the file name: ')
fhand = open(fname)

# 파일명 디버깅
fname = input('Enter the file name: ')
try:
	fhand = open(fname)
except:
	print('File cannot be opened:', fname)
    quit()

 

Assignment

File 챕터의 assignment는 총 두 개가 있었다.

Assignment 7.1은 파일 이름을 묻는 메시지를 표시한 다음 파일명 word.txt 파일을 열고 파일을 읽고 파일 내용을 대문자로 인쇄하는 프로그램을 작성하는 것이었다.

나의 풀이는 아래와 같다.

# ex_7_1
# Use words.txt as the file name
fname = input("Enter file name: ")
fh = open(fname)
fh = fh.read()
for line in fh:
    fh = fh.rstrip()
print(fh.upper())

Assignment 7.2는 input() 함수로 사용자에게 'mbox-short.txt' 파일을 받아 와서 해당 파일을 열고 읽으면서 해당 양식의 행을 찾는 프로그램을 작성한 뒤, 각 행에서 float 값을 추출한 후 그 값의 평균을 계산하여 아래와 같이 출력한다. 단, sum() 함수나 sum이라는 변수를 사용하면 안 됐다.

나의 풀이는 아래와 같다.

# ex_7_2
# Use the file name mbox-short.txt as the file name
fname = input("Enter file name: ")
fh = open(fname)

total = 0
count = 0

for line in fh:
    if not line.startswith("X-DSPAM-Confidence:"):
        continue
    line = line[20:]
    total = total + float(line)
    count = count + 1
print('Average spam confidence:',total/count)

'Python > PY4E' 카테고리의 다른 글

PY4E Chapter 9. Dictionaries  (0) 2022.08.08
PY4E Chapter 8. Lists  (0) 2022.08.08
PY4E Chapter 6. Strings  (0) 2022.08.05
PY4E Chapter 5. Loops and Iterations  (0) 2022.08.05
PY4E Chapter 4. Functions  (0) 2022.08.02

댓글