토익 공부를 위해 영단어를 외우려 한다
영단어 리스트 조작을 위해 파일 입출력을 알아둬야 한다
거창한거 말고 리눅스 CLI 환경으로 만들고 모바일로 SSH 접속하여 실행하면 간편하겠다
영단어의 형식은 다음과 같이 하면 읽기도 편하고 처리하기도 편할 것이다
굳이 영단어가 아니더라도 좋다
<vocaList.txt>
hello : 안녕
world : 세상
face : 얼굴; 마주하다
1. 파일 열기
file = open('vocaList.txt', 'r', encoding='utf-8')
(CentOS 기본 인코딩은 utf-8, 윈도우의 경우 cp949, 즉 ansi)
첫 번째 인자는 파일 이름
두 번째 인자는 파일 처리 형식
(r : 읽기, w : 덮어쓰기, a : 이어쓰기, x : 해당파일 없을 경우만 쓰기)
(인자에 +를 붙이는 경우 읽기 쓰기 둘 다 가능 ex) w+)
file은 Stream
2. 파일 내용 읽기
#한줄 한줄 읽기(개행문자 포함)
for line in file:
...
read(), readline(), readlines(), seek() 등의 함수를 이용해 스트림을 활용할 수 있다
근데 굳이 커서 일일이 움직여가며 세밀하게 할 필요까진 없어서 한줄 한줄 읽어서 처리하는게 간편하다
3. 파일의 내용을 처리하기
#영단어와 뜻 구분짓기
lstEng = list()
lstKor = list()
for line in file:
line = line.strip() #개행문자 제거
kr, eng = line.split(' : ')
lstEng.append(eng)
lstKor.append(kr)
for word in list(zip(lstEng, lstKor)):
print(f"{word[0]}의 뜻은 {word[1]} 입니다.")
# hello의 뜻은 안녕입니다.
# ...
# face의 뜻은 얼굴; 마주하다입니다.
(list 말고 dict, tuple 등 자료구조를 이용해도 문제없을 것이다)
(zip 안쓰고 영단어와 뜻을 병렬로 처리해도 좋다)
4. 최종 코드
def read(fileName):
file = open(fileName, 'r', encoding='utf-8')
lstEng, lstKor = list(), list()
for line in file:
line.strip() #개행문자 제거
lstEng, lstKor = line.split(' : ')
return list(zip(lstEng, lstKor))
#main
vocaList = read('vocaList.txt')
for word in vocaList:
input(f"{word[0]}의 뜻은?")
print(f"{word[1]} 입니다.")
이렇게 하면 단어 목록에 있는 단어를 잘 외울 수 있을 것이다
번외) 빈 파일이 생성된 경우의 예외처리
파일이 비었을 경우 1, 아닐 경우 0을 반환하는 함수
import os
def isEmpty(fileName):
if os.stat(fileName).st_size == 0:
return 1
else:
return 0