스터디 그룹/ProjectH4C

ProjectH4C 1개월 2주차 과제 (UNIT 27, 28)

📖 UNIT 27. 파일 사용하기

📒파일에 문자열 읽기, 쓰기

file = open('unit27.txt', 'w')
file.write('hihi')
file.close()

먼저, 파일 입출력은 위와 같은 과정을 거치게 된다. 

 

한 줄 한 줄 보자면, 먼저 unit27.txt라는 파일을 쓰기 전용으로 불러온다.

가장 중요한 것은, 파일을 무조건 다시 닫아야 한다는 것이다, 

 

이게 귀찮다고 느낄 수도 있다.

with open(파일이름, 파일모드) as 파일객체:
    코드

그럼 위와 같이 코딩을 해보자. 파일이 열려있는 동안만 해당되는 코드를 수행하는 것이다.

당연히 그 코드가 끝이 난다면, 파일은 바로 닫히게 된다.

 

📒본격적으로 파일에 문자열 읽기, 쓰기

with open('unit27.txt', 'w') as file: 
    for i in range(3):
        file.write('Hello, world! {0}\n'.format(i))

파일에는 내용들이 잘 들어갔음을 확인할 수 있다. 만약에 unit27.txt라는 파일이 비어져있는 파일이 아니라면 어떡할까??

기존 파일의 데이터를 지워버리고 아예 새로 써버린다. 코딩을 할 때 이러한 점은 조심해야 할 것 같다.

 

📒파이썬 객체를 파일에 저장하기

먼저 파이썬 객체를 파일에 저장하는 행위를 피클링이라고 한다.

import pickle
 
name = 'mm0ck3r'
age = 20
address = 'Seoul-Si'
scores = {'korean': 90, 'english': 95, 'mathematics': 85, 'science': 82}
 
with open('unit27.p', 'wb') as file:  
    pickle.dump(name, file)
    pickle.dump(age, file)
    pickle.dump(address, file)
    pickle.dump(scores, file)

먼저 이런 코드를 써보자.

인코딩이 깨짐을 확인할 수 있다. 어떻게 해야하지 utf-8로 해보자.

아 깨지는것이 당연하다. 그 이유는 피클은 바이너리로 저장시키기 때문이다.

이제 이 unit27.p 파일을 읽어보자.

 

import pickle
 
with open('unit27.p', 'rb') as file:  
    name = pickle.load(file)
    age = pickle.load(file)
    address = pickle.load(file)
    scores = pickle.load(file)
    print(name)
    print(age)
    print(address)
    print(scores)

제대로 실행이 된다 !!!

 

앞으로 자주 보게될 그림같다. 좀 익숙해질 필요가 있겠다.

 

📖 UNIT 28. 회문판별과 N-gram 만들기.

📒회문판별

먼저, 회문(palindrome)의 정의를 좀 알아보자.

회문은 순서를 거꾸로 해도 같은 문자열을 말한다. 즉 가로로 대칭인 문자열을 말하는 것 같다.

문자열을 받으면 회문판별하는 프로그램을 만들어보자.

성공이다 !@!@!@!

a = input('input the Sting => ')
if(a==a[::-1]):
    print('right')
else:
    print('wrong')

사실 a의 인덱스에서 ::-1로 지정해주면 바로 역순으로 출력이 된다.

그니까 a와 a[::-1]을 비교해주면 문제는 풀리게 되는 것이다.