반응형
파일 입출력
- open 함수
- 파일을 열수 있는 함수
- 파일 객체를 반환
- w: 쓰기 모드
- a: 추가 모드
- r: 읽기 모드
- 쓰기 모드
f = open("memo.txt","w") # 해당 파일이 없을 경우 새로 생성
print(f)
f.close() # 파일을 열면 항상 닫아줘야한다.
<_io.TextIOWrapper name='memo.txt' mode='w' encoding='UTF-8'>
f = open("memo.txt","w")
for i in range(1,11):
data = f"{i} 번째 줄\n"
f.write(data)
f.close()
- 쓰기 모드로 여는 순간 안에 파일 내용이 사라진다.
# f = open("memo.txt","w")
# f.close()
- 추가모드
f = open("memo.txt","a")
data = "11 번째 줄\n"
f.write(data)
f.close()
- 읽기 모드
f = open("memo.txt","r")
data = f.read() # 파일 전체의 내용을 읽어서 반환한다.
f.close()
print(data)
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
f = open("memo.txt","r")
while True:
data = f.readline() # 한줄씩 읽는데 줄바꿈 문자도 포함된다.
if not data:
break
print(data,end="")
f.close()
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
f = open("memo.txt","r")
data = f.readlines()
f.close()
print(data)
['1 번째 줄\n', '2 번째 줄\n', '3 번째 줄\n', '4 번째 줄\n', '5 번째 줄\n', '6 번째 줄\n', '7 번째 줄\n', '8 번째 줄\n', '9 번째 줄\n', '10 번째 줄\n', '11 번째 줄\n']
- with 문
- 자동으로 파일을 닫아준다.
with open("memo.txt","r") as f: # open 함수로 인해 반환되 파일객체를 f 변수가 받아준다.
data = f.read()
print(data)
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
- with 문은 파일을 자동으로 닫아 주기 때문에 다음 처럼 메소드를 실행시 오류가 발생한다.
f.read()
with open("memo.txt","r") as f:
while True:
data = f.readline()
if not data: break
print(data,end="")
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
- for문을 이용한 방법
with open("memo.txt","r") as f:
for line in f:
print(line,end="")
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
with open("memo.txt","r") as f:
for line in f:
line = line.strip()
print(line)
1 번째 줄
2 번째 줄
3 번째 줄
4 번째 줄
5 번째 줄
6 번째 줄
7 번째 줄
8 번째 줄
9 번째 줄
10 번째 줄
11 번째 줄
with open("memo.txt","r") as f:
for i,line in enumerate(f,1):
print(f"No.{i} {line}",end="")
No.1 1 번째 줄
No.2 2 번째 줄
No.3 3 번째 줄
No.4 4 번째 줄
No.5 5 번째 줄
No.6 6 번째 줄
No.7 7 번째 줄
No.8 8 번째 줄
No.9 9 번째 줄
No.10 10 번째 줄
No.11 11 번째 줄
2X1=2
...
2X9=18
...
...
...
9X1=9
...
9X9=81
with open("구구단.txt","w") as f:
for n in range(2,10):
for i in range(1,10):
f.write(f"{n}X{i}={n*i}\n")
구구단.txt 파일을 읽어서 구구단의 결과값들만 정수형태로 변경해서 리스트에 담으세요.
with open("구구단.txt","r") as f:
lst = [ int(line.strip().split("=")[1]) for line in f]
lst
[2,
4,
6,
8,
10,
12,
14,
16,
18,
3,
6,
9,
12,
15,
18,
21,
24,
27,
4,
8,
12,
16,
20,
24,
28,
32,
36,
5,
10,
15,
20,
25,
30,
35,
40,
45,
6,
12,
18,
24,
30,
36,
42,
48,
54,
7,
14,
21,
28,
35,
42,
49,
56,
63,
8,
16,
24,
32,
40,
48,
56,
64,
72,
9,
18,
27,
36,
45,
54,
63,
72,
81]
구글드라이브 연결해서 파일 가져오기
- 마운트(mount)란?
- 리눅스 환경에서 하드디스크나 usb 메모리 같은 물리적인 장치를 사용하기 위해 리눅스 환경에서 지정한 디렉토리에 연결해주는 과정을 말한다.
!uname
Linux
!cat /etc/issue
Ubuntu 18.04.6 LTS \n \l
!pwd
/content
from google.colab import drive
drive.mount("/content/drive")
Mounted at /content/drive
DATA_PATH = "/content/drive/MyDrive/01-python/data/"
DATA_PATH
with open(f"{DATA_PATH}memo.txt" , "r") as f:
data = f.readlines()
print(data)
['1 번째 줄\n', '2 번째 줄\n', '3 번째 줄\n', '4 번째 줄\n', '5 번째 줄\n', '6 번째 줄\n', '7 번째 줄\n', '8 번째 줄\n', '9 번째 줄\n', '10 번째 줄\n', '11 번째 줄\n']
JSON 파일 입출력
- 자바스크립트에서 사용되는 객체 표현식
- 데이터를 저장하거나 전송할때 많이 사용
- 서버와 클라이언트간의 데이터 전송과정에서 많이 사용
- 파이썬의 딕셔너리와 매우 유사
import json
DATA_PATH
with open(f"{DATA_PATH}info.json","r") as f:
data = json.load(f) # json 파일을 딕셔너리 형태로 변환해서 반환
type(data)
dict
data
{'Daniel': {'age': 20, 'height': 170},
'John': {'age': 20, 'height': 175, 'weight': 80}}
data["승천"] = {"age":31}
data
{'Daniel': {'age': 20, 'height': 170},
'John': {'age': 20, 'height': 175, 'weight': 80},
'관수': {'age': 42}}
with open("info.json","w") as f:
# 한글포함시: ensure_ascii = False
# 들여쓰기: indent = 4 or 2
json.dump(data,f,ensure_ascii=False,indent= 4)
YAML(Yet Another Markup Language)
- 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식
- 데이터를 저장하거나 전송할때 많이 사용
import yaml
data
{'Daniel': {'age': 20, 'height': 170},
'John': {'age': 20, 'height': 175, 'weight': 80},
'관수': {'age': 42}}
with open("data.yml","w") as f:
yaml.dump(data,f,default_flow_style=False,indent =4 , allow_unicode=True)
with open("data.yml","r") as f:
data1 = yaml.load(f)
type(data1)
dict
data1
{'Daniel': {'age': 20, 'height': 170},
'John': {'age': 20, 'height': 175, 'weight': 80},
'관수': {'age': 42}}
data1["리스트"] = [True,False,"문자열",3.14]
with open("data1.yml","w") as f:
yaml.dump(data1,f,default_flow_style=False,indent=4,allow_unicode=True)
with open("data1.yml" , "r") as f:
data1 = yaml.load(f)
data1
{'Daniel': {'age': 20, 'height': 170},
'John': {'age': 20, 'height': 175, 'weight': 80},
'관수': {'age': 42},
'리스트': [True, False, '문자열', 3.14]}
pickle 모듈
- 우리가 사용하는 다양한 객체들을 파일로 저장하고 싶다면?
- 객체의 구조를 직렬화해서 파일로 저장한다.
import pickle
data = [1,2,3,4,[10,20],"hi"]
with open("data.pkl","wb") as f:
pickle.dump(data,f)
with open("data.pkl","rb") as f:
rdata = pickle.load(f)
rdata
[1, 2, 3, 4, [10, 20], 'hi']
- 클래스와 인스턴스도 저장되는지 해보자
class MyClass:
def __init__(self):
self.my_name="My Class"
with open("myclass.pkl","wb") as f:
pickle.dump(MyClass,f)
with open("myclass.pkl","rb") as f:
class_ = pickle.load(f)
class_
__main__.MyClass
반응형
'python' 카테고리의 다른 글
[python]파이썬 - open API (2) | 2023.01.30 |
---|---|
[python]파이썬 - pip와 가상환경 (0) | 2023.01.26 |
[python]파이썬 - 정규표현식 (0) | 2023.01.26 |
[python]파이썬 - 제너레이터(Generator) (0) | 2023.01.25 |
[python]파이썬 - 모듈(Module), 패키지(Package) (0) | 2023.01.24 |
댓글