# 파일 읽기
with open('data/chicken.txt', 'r') as f: # r : read, 파일 읽어서 f 라는 변수에 저장
print(type(f))
파일 정보 읽는 법
for 문을 쓰면 list 와 비슷하게 쓸 수 있음
with open('data/chicken.txt', 'r') as f: # r : read, 파일 읽어서 f 라는 변수에 저장
for line in f:
print(line)
인코딩 에러
with open('data/chicken.txt', 'r', encoding = 'UTF-8') as f: # r : read, 파일 읽어서 f 라는 변수에 저장
for line in f:
print(line)
# strip
# strip : 화이트 스페이스 제거 (화이트스페이스 : " ", "\t", "\n")
print(" \n \t abd def \n\n\n ".strip()) # 맨 앞, 맨 뒤 화이트 스페이스 제거
with open('data/chicken.txt', 'r', encoding = 'UTF-8') as f: # r : read, 파일 읽어서 f 라는 변수에 저장
for line in f:
print(line.strip())
cf) 중간의 공백은 제거할 수 없음
없애고 싶으면 replace 메소드 활용
message = " 무 지 개"
new_message = message.replace(" ", "")
print(new_message) # 무지개
# split : 문자열을 파라미터 기준으로 나누어서 리스트 만들어줌 (리스트 값 : 모두 문자열)
my_string = "1. 2. 3. 4. 5. 6"
print(my_string.split(".")) # 파라미터 기준으로 나뉨
print(my_string.split(". "))
print()
full_name = "Kim, Yuna"
print(full_name.split(","))
name_data = full_name.split(", ")
last_name = name_data[0]
first_name = name_data[1]
print(first_name, last_name)
numbers = " \n\n 2 \t 3 \n 5 7 11 \n\n".split()
print(numbers[0] + numbers[1])
print(int(numbers[0]) + int(numbers[1]))
# 실습과제
data 폴더의 chicekn.txt 파일을 읽어 들이고, strip과 split을 써서 12월 하루 매출 출력
cf. 31일인 달이 있고, 아닌 달도 있음
chicken.txt // 며칠 : 그 날의 매출
1일: 453400
2일: 388600
3일: 485300
4일: 477900
5일: 432100
6일: 665300
7일: 592500
8일: 465200
9일: 413200
10일: 523000
11일: 488600
12일: 431500
13일: 682300
14일: 633700
15일: 482300
16일: 391400
17일: 512500
18일: 488900
19일: 434500
20일: 645200
21일: 599200
22일: 472400
23일: 469100
24일: 381400
25일: 425800
26일: 512900
27일: 723000
28일: 613600
29일: 416700
30일: 385600
31일: 472300
# 파일 열기
with open('data/chicken.txt', 'r') as f:
total_revenue = 0
total_days = 0
for line in f:
data = line.strip().split(": ")
revenue = int(data[1]) # 그날의 매출
total_revenue += revenue
total_days += 1
print(total_revenue / total_days)
# 파일 쓰기
with open('new_file.txt', 'w') as f:
f.write("Hello world!/n")
f.write("My name is Codeit.")
# 파일 추가 쓰기
with open('new_file.txt', 'a') as f:
f.write("Hello world!/n")
f.write("My name is Codeit.")
+
파일에 내용 없어도 w 대신 a 사용 가능
# 실습과제
사용자가 새로운 단어와 뜻을 입력할 때마다 vocabulary.txt에 작성
사용자는 반복적으로 단어와 뜻을 입력
q를 입력하는 순간 프로그램은 즉시 종료
사용자가 q를 입력하고 나면 파일은 더 이상 바뀌지 않아야 함
vocabulary.txt
영어 단어를 입력하세요:
영어 단어를 입력하세요: cat
한국어 뜻을 입력하세요:
영어 단어를 입력하세요: cat
한국어 뜻을 입력하세요: 고양이
영어 단어를 입력하세요:
영어 단어를 입력하세요: cat
한국어 뜻을 입력하세요: 고양이
영어 단어를 입력하세요: apple
한국어 뜻을 입력하세요:
영어 단어를 입력하세요: cat
한국어 뜻을 입력하세요: 고양이
영어 단어를 입력하세요: apple
한국어 뜻을 입력하세요: 사과
영어 단어를 입력하세요:
while문에서 반복적으로 해야할 일
- 영어 단어를 입력 받는다.
- 만약 유저가 q를 입력했으면 프로그램을 종료한다.
- 한국어 뜻을 받는다.
- 만약 유저가 q를 입력했으면 프로그램을 종료한다.
- 영어 단어와 한국어 뜻을 단어: 뜻의 형태로 파일에 작성한다.
# 파일 열기
with open('vocabulary.txt', 'w') as f:
while True:
english_word = input('영어 단어를 입력하세요: ')
if english_word == 'q':
break
korean_word = input('한국어 뜻을 입력하세요: ')
if korean_word == 'q':
break
f.write('{}: {}\n'.format(english_word, korean_word))
한글 인식 안될 때
open('파일명', encoding='utf-8') // open 에 encoding="utf-8" 인자를 추가
# 실습과제
위 vocabulary.txt 파일의 단어들을 가지고 학생들에게 문제를 내 주는 프로그램
프로그램이 콘솔에 한국어 뜻을 알려주면 사용자는 그에 맞는 영어 단여 입력
사용자 정답 : "맞았습니다!"
사용자 오답 : "아쉽습니다. 정답은 000입니다." 출력
문제를 내는 순서 : vocabulary.txt 에 정리된 순서
# 파일 열기
with open('vocabulary.txt', 'r') as f:
for line in f:
# strip으로 line에서 "/n" 없애기
# split으로 영어 단어와 한국어 뜻 나누기
data = line.strip().split(": ")
english_word, korean_word = data[0], data[1]
# 유저 입력값 받기 (문제 내기)
guess = input("{}: ".format(korean_word))
# 정답 확인하기
if guess == english_word:
print("맞았습니다!\n")
else:
print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))
# 실습과제
random 모듈과 사전(dictionary)을 이용해서 vocabulary.txt의 단어들을 랜덤한 순서로 내도록 프로그램을 바꾸기
같은 단어를 여러번 물어봐도 괜찮고, 프로그램은 사용자가 알파벳 q를 입력할 때까지 계속 실행
import random
# 사전 만들기 ; 파일에 있는 단어와 뜻 모두 vocab 사전에 정리
vocab = {}
with open('vocabulary.txt', 'r') as f:
for line in f:
data = line.strip().split(": ")
english_word, korean_word = data[0], data[1]
vocab[english_word] = korean_word
# 목록 가져오기 ; 영어 단어 목록 받아오기 위해 keys라는 변수에 저장
keys = list(vocab.keys())
# 문제 내기
while True:
# 랜덤한 문제 받아오기
index = random.randint(0, len(keys) - 1) # raodom 모듈의 randint 함수 이용해서 랜덤한 인덱스 받기
english_word = keys[index] # 그 랜덤한 인덱스를 통해 vocab.keys()리스트에서 단어 받기
korean_word = vocab[english_word] # 이에 해당한느 한국어 뜻 받아오기
# 유저 입력값 받기
guess = input("{}: ".format(korean_word))
# 프로그램 끝내기
if guess == 'q':
break
# 정답 확인하기
if guess == english_word:
print("정답입니다!\n")
else:
print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))
'Language > Python' 카테고리의 다른 글
Project : 숫자야구 (0) | 2022.08.30 |
---|---|
Project : 로또 시뮬레이션 (0) | 2022.08.30 |
모듈 , 사용자 입력 (0) | 2021.07.12 |
데이터 (0) | 2021.07.09 |
사전 (0) | 2021.07.08 |