오늘은 파일의 입출력(I/O)부터 시작한다.
파일의 입출력에 대해서는 4가지의 모드가 존재한다.
1. "r" : 읽기 모드
ㄴ ex) file = open("sample.txt", "r")
2."w" : 쓰기 모드 - 기존 내용을 삭제하고 새로 작성한다.
ㄴ 만약 파일이 없다면 생성 / 있다면 덮어쓰기
ㄴ file = open("output.txt", "w")
file.write("백반\n")
file.write("오늘은 2월 10일\n")
file.write("날씨 맑음")
file.close()
"a" : 추가 모드 - 기존 내용을 유지하고, 추가로 작성한다
"b" : 바이너리 모드
위의 예들을 보면, 파일을 쓰거나 읽기 위해 open()한 후, 꼭 close()를 해줘야 한다는 것을 확인할 수 있다.
개발자가 깜빡하고 close()를 하지 않는 실수를 with open 문으로 방지할수 있다. (Python은 친절하다...)
형태는 이러하다.
파일 입출력을 실습하며, 관련한 함수들도 예제를 통해 공부할 수 있었다.
먼저, strip() 함수이다. 공백이나 특정 문자열을 제거할 수 있다.
아래의 그림의 경우를 예로 들어
l.strip()은 각 줄에 존재하는 공백을 제거한다. 특정 문자나 문자열을 제거하고 싶으면 ()에 넣으면 된다.
두번째, enumerate() 함수이다. 순서가 있는 자료형을 입력으로 받았을 때, 인덱스와 값을 포함하여 리턴한다.
주로 인덱스와 값을 동시에 접근하기 위해 사용된다. (즉, 멀티가 되는 편리한 함수이다)
세번째로, in은 함수라 하긴 뭐하지만... 찾고자 하는 문자나 단어를 포함된 줄을 찾는 기능이다.
예를 들어,
with open("sample2.txt", "r") as file:
for line in file:
if "Python" in line:
print(line.strip())
'sample2.txt' 파일을 읽기 모드로 가져올 때, "Python"이라는 단어가 포함된 줄만 찾아 출력하도록 한다.
반대로, 포함되지 않은 줄을 출력하려면 not in을 사용하면 된다.
네번째, 다섯번째는 split()과 join()이다.
split()은 문자열을 리스트로 분리, join()은 리스트를 다시 문자열로 결합한다.
split의 ()안은 공백, 문자, 문자열 등 나누기의 기준으로 삼고 싶은 인자를 넣으면 되고,
join의 ()안에는 분리되어 있거나, 합치고자 하는 리스트의 값를 넣으면 된다.
여섯번째는 replace() 함수이다. 문자열에서 특정 문자를 다른 문자로 교체하기 위해 사용된다.
형태는 이러하다.
str3 = "I love Python"
# 문자열.replace(old_word, new_word)
str3 = str3.replace("Python", "C")
print(str3) ---> " I love C"
****** replace()는 단지 반환만 하기 때문에,
str3 = str3.replace("Python", "C") 다시 한번 받아줘야한다.
예외 처리란?
코드 작성 시 발생할 수 있는 예기치 않은 상황들을 처리, 프로그램의 안정성과 신뢰성을 높이기 위해 사용한다.
- try : 오류가 발생할 수 있는 코드를 넣음
- except : try에서 오류가 발생시 처리할 코드
- finally : 오류 발생 여부와 관계 없이 항상 실행
위 이미지에 대한 해석은 이러하다.
try :
number = int(input("정수를 입력하세요: " ))
print(10 / number)
-> 실행하고자 하는 문장
except ZeroDivisionError:ㅠ
print("0으로 나눌 수 없습니다")
-> 0이 들어왔을 때 계산 오류로 인한 문자 출력
except ValueError:
print("정수가 아닙니다")
-> 정수가 아닌 수가 들어왔을 때의 오류를 문자 출력
finally :
print("프로그램 종료")
-> 항상 실행되는 구문으로, 모두 다 "프로그램 종료" 문자를 출력하게 됨
존재하지 않는 파일에 대한 예외 처리, 문자열 오류 처리, 0에 대한 오류 처리 등을 실습하였다.
OS, shutil에 대해서도 공부를 하였다.
OS : 운영체제와 상호작용할 수 있는 기능을 제공하는 라이브러리
1) mkdir -> 빈 폴더 생성
os.mkdir("new_folder")
2) rmdir -> 폴더 삭제 , 빈 폴더만 삭제 가능
os.rmdir("new_folder")
3) listdir() 경로에 있는 파일, 폴더 확인 가능
print(os.listdir())
Shutil(shell utilites) : 파일 복사, 이동, 삭제 등 고급 기능 제공, os보다 강력한 기능
폴더 복사: shutil.copy("sample.txt", "backup.txt")
shutil.copytree -> 폴더 복사
ex) shutil.copytree("practice_folder", "backup_folder")
파일 이동 (.move())
ㄴshutil.move("이전 경로", "새로운 경로")
ex) shutil.move("sample2.txt", "backup_folder/sample2.txt")
이전 파일은 삭제
파일 삭제(.remove())
ex) os.remove("backup_folder/renamed_test.txt") -> backup_folder의 renamed_test를 제거
os.listdir("backup_folder")
폴더 강제 삭제 (shutil.rmtree()) 모든 내용이 삭제되므로 **주의**
ex) shutil.rmtree("backup_folder")
os.listdir()
os와 shutil에 대한 여러 기능들을 실습을 통해 확인하였다.
CSV(Comma seperated values) : 콤마로 구분된 파일로 엑셀, 데이터베이스, 프로그래밍 언어 간 데이터 교환에 사용됨.
구조: 첫번째 줄은 헤더(컬럼 이름), 그 아래는 데이터행(row)
----> 처음에 데이터 넣으면서 정수를 문자열로 저장하게됨
기본적으로, 파일 읽기와 쓰기에 관한 기능을 사용할 수 있다.
또한, 이를 활용하여 dictionary 형태로 읽어, 원하는 값을 추출하고 출력하기도 한다.
동일한 정보를 담고 있는 여러개의 CSV 파일을 병합하는 merge 기능도 존재한다.
JSON (Java Script Object Notation): 데이터를 키-값 쌍으로 저장하는 형식
딕셔너리와 구조가 비슷하며, 데이터 전송 및 저장에 널리 사용됨
JSON의 파일 읽기는 load()형식으로 JSON 파일을 Python의 딕셔너리로 변환한다.
ㄴ 형태: json.load()
ㄴ reader = csv.DictReader(file)
JSON의 파일 쓰기 형태 또한, 딕셔너리 형태를 JSON파일로 변환하여 저장한다.
ㄴ 형태: json.dump(딕셔너리,file)
ex) 딕셔너리 타입(data3)를 json타입으로 변환
data3 = {"Name":"임희주","Age":25, "MBTI":"ISTJ"}
# dictionary type을 JSON Type으로 변환
json_data3 = json.dumps(data3, ensure_ascii= False)
print(json_data3)
JSON파일에 대한 읽기와 쓰기에 대하 실습한 예제이다. 더욱 간결한 코드 작성을 위해 노력해야겠다...
중첩 JSON파일에 대해서도 실습하였다.
영화진흥원에서 제공하는 중첩 JSON데이터 형식을 활용하여 원하는 정보를 얻기도 하였다.
느낀점: 학부시절 Python 수업을 제대로 듣지 않았구나를 느꼈다... 이번 내용을 공부하며 함수의 기능이나 사용법에 대해서 많이 배우게 되었다. 우리가 리스트나 딕셔너리를 다루는 방식과 흡사한 점이 많아서 이해하기에는 수월했던 것 같다. 이러한 개념들을 잘 간직하고, 영화진흥원에서 제공하는 실제 데이터를 통해 실습한 경험을 기반으로, 추후에 진행할 프로젝트를 열심히 잘 해내고 싶다.
'[HARMAN] 세미콘 아카데미 > 공부내용' 카테고리의 다른 글
[Harman 세미콘 아카데미] Day_7 (Python) (0) | 2025.02.12 |
---|---|
[Harman 세미콘 아카데미] Day_6 (Python 기초) (0) | 2025.02.11 |
[Harman 세미콘 아카데미] Day_4 (Python 기초) (0) | 2025.02.09 |
[Harman 세미콘 아카데미]Day_3(Python 기초) (1) | 2025.02.06 |
[Harman 세미콘 아카데미]Day_2(Python 기초) (0) | 2025.02.05 |