728x90
반응형
SMALL
1.fileinput
- 텍스트 파일을 읽고, 쓰고, 저장하는 기능을 편리하게 사용할 수 있도록 해주는 라이브러리
- 여러개의 파일을 읽어서 수정할 수 있음
import fileinput
import os
import glob
# 현재 경로 확인
os.getcwd()
>>> 'C:\\yesung\\jupyter'
# 디렉토리 내 모든 파일을 리스트로 불러옴
os.listdir(os.getcwd())
>>> ['.ipynb_checkpoints',
'24_파일 입출력 라이브러리.ipynb',
'dic.pkl',
'list.pkl',
'sample']
1-1. glob()
파일의 이름을 리스트로 반환
✅현재 폴더에 하위폴더 'sample'을 만들고 안에 새파일1~5.txt 5개의 파일을 만들었다.
# 경로 설정
path = 'sample/'
glob.glob(os.path.join(path, '*.txt'))
>>>
['sample\\새파일1.txt',
'sample\\새파일2.txt',
'sample\\새파일3.txt',
'sample\\새파일4.txt',
'sample\\새파일5.txt']
✅ 각 파일에는 다음과 같이 3줄씩 '15번째 줄 입니다.' 까지 입력하고 저장했다.
1-2. input()
- 파일에 있는 내용을 읽어옴
✅모든 txt파일의 내용을 읽어오기
with fileinput.input(glob.glob(os.path.join(path, '*.txt'))) as f:
for line in f:
print(line)
✔ 위 코드를 작성 후 실행하니
UnicodeDecodeError: 'cp949' codec can't decode byte 0x84 in position 10: illegal multibyte sequence
위와 같은 인코딩 오류 발생,
5개의 txt 파일의 인코딩 문제로, 모두 인코딩을 ANSI 변환 후 재저장하고 다시 실행하니 잘 실행 되었다.
with fileinput.input(glob.glob(os.path.join(path, '*.txt'))) as f:
for line in f:
print(line)
>>> 1번째 줄 입니다.
2번째 줄 입니다.
3번째 줄 입니다.
4번째 줄입니다.
5번째 줄 입니다.
6번째 줄 입니다.
7번째 줄 입니다.
8번째 줄 입니다.
9번째 줄 입니다.
10번째 줄 입니다.
11번째 줄 입니다
12번째 줄 입니다.
13번째 줄 입니다.
14번째 줄 입니다.
15번째 줄 입니다.
1-3. isfirstline()
- 파일의 첫번째 줄이면 True, 아니면 False를 반환
✅ 파일의 내용을 모두 읽어와 각 파일의 첫번째 줄을 '첫번째 라인입니다'로 변경하기
txt_files = glob.glob(os.path.join(path, '*.txt'))
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if f.isfirstline():
print('첫번째 라인입니다',end='\n')
else:
print(line, end='')
모든 파일의 첫번째 줄이 '첫번째 라인입니다'로 잘 변경되었다!😀
✅ '첫번째 라인입니다' 키워드 검색하여 '1번째 라인입니다' 로 변경하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if line == '첫번째 라인입니다\n':
print('1번째 라인입니다',end='\n')
else:
print(line, end='')
모든 파일의 첫번째 줄이 '1번째 라인입니다'로 잘 변경되었다!
✅ 키워드가 포함된 라인을 '첫번째 줄입니다'로 변경하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if '1번째' in line:
print('첫번째 줄입니다',end='\n')
else:
print(line, end='')
'첫번째' 키워드가 있는 줄이 '첫번째 줄입니다'로 잘 변경되었다!
✅ replace()를 통해 '12번째' 키워드를 '열두번째'로 치환하기
with fileinput.input(txt_files, inplace=True) as f:
for line in f:
if '12번째' in line:
print(line.replace('12번째','열두번째'),end='')
else:
print(line, end='')
'12번째' 키워드가 있는 줄이 '열두번째'로 잘 치환되었다!
2. pickle
- 파이썬에서 사용하는 딕셔너리, 리스트, 클래스 등의 자료형을 변환 없이 그대로 파일로 저장하고 불러올 때 사용하는 모듈
- 확장명 .pkl
✅ list 데이터 저장하기
import pickle
data = ['apple', ' banana', 'orange']
with open('list.pkl', 'wb') as f: # 쓰기 모드
pickle.dump(data, f)
list.pkl이 현재 경로에 잘 저장 되었다!
✅ 저장한 list.pkl 읽어오기
with open('list.pkl', 'rb') as f: # 읽기 모드
data = pickle.load(f)
type(data)
>>> list
print(data)
>>> ['apple', ' banana', 'orange']
✅ 딕셔너리 자료형 데이터 저장하기
data = {}
data[1] = {'id':1, 'user_id':'apple', 'name':'김사과', 'gender':'여자', 'age':20}
with open('dict.pkl', 'wb') as f:
pickle.dump(data, f)
dict.pkl이 현재 경로에 잘 저장 되었다!
✅ 저장한 dict.pkl 읽어오기
with open('dict.pkl', 'rb') as f:
data = pickle.load(f)
type(data)
>>> dict
print(data)
>>> {1: {'id': 1, 'user_id': 'apple', 'name': '김사과', 'gender': '여자', 'age': 20}} # 2차원 dict
728x90
반응형
LIST
'Python > Basic' 카테고리의 다른 글
[파이썬, Python] 파일 입출력 라이브러리 - 3️⃣ zlib, gzip, zipfile, tarfile_파이썬으로 파일 압축/압축 해제하기! (1) | 2023.03.14 |
---|---|
[파이썬, Python] 파일 입출력 라이브러리 - 2️⃣fnmatch & shutil _파이썬으로 파일 찾기, 복사, 이동하기! (0) | 2023.03.14 |
[파이썬, Python] 주피터 노트북 (Jupyter notebook) 설치하기 & 주피터 노트북 사용하기! (1) | 2023.03.14 |
[파이썬, Python] 변수 타입 어노테이션에 대해 알아보자! 🧐 (0) | 2023.03.14 |
[파이썬, Python] 클로저(Closure)와 데코레이터(Decorator) (0) | 2023.03.14 |