1. ํ์ผ
๐ ๋ณ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ข์ ๋ฐฉ๋ฒ
โก๏ธ ๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ์ถ๋ค๋ฉด, ํ์ผ ํํ๋ก ์ ์ฅํด์ผ ํจ
1) ํ์ผ๊ณผ ํ์ผ ๊ฒฝ๋ก
โก๏ธ ํ์ผ์๋ ํ์ผ ์ด๋ฆ๊ณผ ๊ฒฝ๋ก๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์์์ฑ์ด ์๋ค.
ex. ์๋์ฐ ์ด์์ฒด์ ๋ฅผ ์ฌ์ฉํ๋ ๋
ธํธ๋ถ ์ปดํจํฐ์ C:\Users\al\Documents ๋ผ๋ ๊ฒฝ๋ก์
project.docx ๋ผ๋ ์ด๋ฆ์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ
โถ๏ธ ํ์ผ์ด๋ฆ project.docx๋ ์๋ ๋ฌธ์์ด๊ณ Users, al, Documents๋ ๋ชจ๋ ํด๋(๋๋ ํ ๋ฆฌ)
โถ๏ธ ํด๋ ์์๋ ํ์ผ์ด๋ ๋ค๋ฅธ ํด๋๊ฐ ๋ค์ด ์์ ์ ์์
โก๏ธ ๊ฒฝ๋ก์ C:\๋ ๋ฃจํธ ํด๋๋ฅผ ๋ํ๋ด๋ฉฐ ๋ชจ๋ ํด๋๊ฐ ์ด ์์ ๋ค์ด ์์
๐ ์๋์ฐ์์ ๋ฃจํธ ํด๋์ ์ด๋ฆ์ "C:\"์ด๋ฉฐ, C ๋๋ผ์ด๋ธ๋ผ๊ณ ๋ถ๋ฆ.
๐ ๋งฅos๋ ๋ฆฌ๋
์ค์์ ๋ฃจํธ ํด๋๋ "/"
๐ ์๋์ฐ, ๋งฅos์์๋ ํด๋์ด๋ฆ์ด๋ ํ์ผ์ด๋ฆ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ง๋ง, ๋ฆฌ๋
์ค์ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ตฌ๋ถํจ
โก๏ธ ์๋์ฐ์์์ ํด๋ ๊ตฌ๋ถ์ "\" ๋ฐฑ์ฌ๋ฌ์๋ฅผ ์ฌ์ฉํ๊ณ , ๋งฅ os๋ ๋ฆฌ๋
์ค์์๋ "/" ์ฌ๋ฌ์๋ฅผ ์ฌ์ฉํจ.
# 1) Path ๊ฐ์ฒด ์ฌ์ฉ.
from pathlib import Path
path = Path('spam', 'bacon', 'eggs') # ์ด์์ฒด์ ์ ๋ง๋ ๊ฒฝ๋ก ์ฒด์ ๋ฅผ ๋ง๋ค์ด ์ค.
print(path) # spam/bacon/eggs
# 2) platform.system() ํจ์ ์ฌ์ฉ.
import platform
my_os = platform.system()
print("OS in my system: ", my_os) # OS in my system: Darwin
if my_os == 'Darwin':
print('Mac ์ด์์ฒด์ ์
๋๋ค.')
else:
print('Mac ์ด์์ฒด์ ๊ฐ ์๋๋๋ค.')
# ํ์ฌ ์์
๋๋ ํ ๋ฆฌ
print(Path.cwd()) # /Users/Desktop/pycharm/pythonProject/part2
2) ์ ๋ ๊ฒฝ๋ก์ ์๋ ๊ฒฝ๋ก
โก๏ธ ์ ๋ ๊ฒฝ๋ก : ํญ์ ๋ฃจํธ ํด๋์์ ์์ํ๋ ๊ฒฝ๋ก
โก๏ธ ์๋ ๊ฒฝ๋ก : ํ์ฌ ์์
๋๋ ํ ๋ฆฌ์ ๋ํ ๊ฒฝ๋ก
๐ '.' : ํ์ฌ ๋๋ ํ ๋ฆฌ
๐ '..' : ์์ ๋๋ ํ ๋ฆฌ
3) ์๋ก์ด ๋๋ ํ ๋ฆฌ ๋ง๋ค๊ธฐ
โก๏ธ os.makedirs() ํจ์๋ก ์๋ก์ด ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์
โก๏ธ os.path.isdir(path) : path ์ธ์์ ๋๋ ํ ๋ฆฌ๊ฐ ์๋์ง ํ์ธ
import os
path = './test'
if not os.path.isdir(path):
os.makedirs(path) # ํ์ฌ ์์
ํด๋ ์์ test๋ผ๋ ํด๋ ์์ฑ.
4) ํ์ผ ํฌ๊ธฐ์ ํด๋ ๋ด์ฉ ํ์ธ
โก๏ธ os.path.getsize(path) : path ์ธ์์ ํด๋นํ๋ ํ์ผ ํฌ๊ธฐ ๋ฐํ
โก๏ธ os.listdir(path) : path์ ์๋ ํ์ผ ์ด๋ฆ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
path = './input'
print(os.path.getsize(f'{path}/hello.txt')) # 53
list_dirs = os.listdir(path)
print(list_dirs) # ['์ฐ๋ฝ์ฒ.txt', 'hello.txt', '์๋ง๋ผ์ง์๊ธฐ๋ผ์ง.txt']
2. ํ์ผ ์ด๊ธฐ
๐ ์
์ถ๋ ฅ ํ์ผ์ ์ง์ ํ๋๊ฒ์ ์๋ฏธ ( ํ์ผ ๊ฐ์ฒด ์์ฑ )
๐ ํ์ผ ์
๋ ฅ๊ณผ ํ์ผ ์ถ๋ ฅ ๋ชจ๋ ๋ฐ๋์ ํ์ผ ์ด๊ธฐ ์์
์ ๊ฐ์ฅ ๋จผ์ ์ํ
ํ์ผ๊ฐ์ฒด = open(ํ์ผ๋ช
, ๋ชจ๋)
1) ํ์ผ๋ช
๐ ์
์ถ๋ ฅ ์์
์ ์ํํ ํ์ผ์ ์๋ฏธ
๐ ํ์ผ๋ช
๋ง ์์ฑํ ์๋ ์๊ณ ๊ฒฝ๋ก๋ฅผ ํจ๊ป ์์ฑํ ์๋ ์์
# ํ์ผ๋ช
๋ง ์์ฑํ๋ ๊ฒฝ์ฐ : ํ์ด์ฌ ์์ค ํ์ผ๊ณผ ๊ฐ์ ๊ฒฝ๋ก์ ์กด์ฌํ๋ ๊ฒฝ์ฐ
open('sample.txt')
# ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ : ๋น๋๊ฐ ์ ์.
open('C:/sample.txt')
# ํ์ฌ ๋๋ ํฐ๋ฆฌ(.)๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์
open('./sample.txt')
open('./input/hello.txt')
# ์์ ๋๋ ํฐ๋ฆฌ(..)๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์
open('../sample.txt')
2) ๋ชจ๋
r (read) | ์ฝ๊ธฐ |
w (write) | ์ฐ๊ธฐ (์๋ก ์ฐ๊ธฐ ๋ชจ๋) |
a (append) | ์ถ๊ฐ (๋ค์ ์ด์ด์ ์ฐ๊ธฐ ๋ชจ๋) |
x (exclusive) | ๋ฐฐํ์ ์ถ๊ฐ (ํ์ผ ์์ผ๋ฉด ์ค๋ฅ, ์์ผ๋ฉด ์๋ก ์์ฑ) |
๐ ํ์ผ์ ์ข
๋ฅ
- t (text) ํ
์คํธ ํ์ผ : ๋ฉ๋ชจ์ฅ์ผ๋ก ์ด ์ ์๋ ํ์ผ
- b (binary) ๋ฐ์ด๋๋ฆฌ ํ์ผ (ํ
์คํธ ํ์ผ ์ธ์ ๋ชจ๋ ํ์ผ)
3. ํ์ผ ๋ซ๊ธฐ
๐พ ํ์ผ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๊ณ ์ ํ ๋
ํ์ผ๊ฐ์ฒด.close()
4. ํ์ผ ์์ฑ
file = open('./output/my_file.txt', 'wt') # ๋นํ์ผ ์์ฑ
print('my_file.txt ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.')
file.close()
# ํ
์คํธ ํ์ผ์ ์๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋์ธ wt ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ my_file.txt๋ผ๋ ์ด๋ฆ์
# ํ
์คํธ ํ์ผ์ output ์ด๋ผ๋ ๋๋ ํ ๋ฆฌ์ ์์ฑํ๋ ์ฝ๋
๐ with๋ฌธ
- close() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถํ ์ ์๋ ๋ฌธ๋ฒ์ ์ ๊ณต
- with๋ฌธ์ ์ฌ์ฉํ๋ฉด with๋ฌธ์ด ๋๋ ๋ ์ธ์ ๋ close() ๋ฉ์๋๊ฐ ์๋์ผ๋ก ํธ์ถ
โก๏ธ ๋ณ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋๋ผ๋ ํ๋ก๊ทธ๋จ์ด๋ ํ์ผ์ ์๋ฌ๋ก close()๊ฐ ํธ์ถ์ด ์๋๋ ์ํฉ์ ๋ฐฉ์ง
# ๊ธฐ๋ณธ ๊ตฌ์ฑ
with open (ํ์ผ๋ช
, ๋ชจ๋) as ํ์ผ๊ฐ์ฒด:
ํ์ผ์ฒ๋ฆฌ์ฝ๋
with open('./output/my_file_1.txt', 'wt') as file:
print('my_file_1.txt ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.')
5. ํ์ผ ์ ์ถ๋ ฅ
๐ ํ์ผ ์
์ถ๋ ฅ : ์ปดํจํฐ์ ์ ์ฅ๋ ํ์ผ์ ์ฝ์ด ๋ค์ด๋ ๊ฒ์ ๋ฌผ๋ก ํ์ผ์ ์์ฑํด์ ์ปดํจํฐ์ ์ ์ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅ
๐ ํ์ผ ์
๋ ฅ input : ๊ธฐ์กด์ ํ์ผ ๋ด์ฉ์ ์ฝ์ด ๋ค์ด๋ ๊ฒ
๐ ํ์ผ ์ถ๋ ฅ output : ๊ธฐ์กด ํ์ผ์ ์๋ก์ด ๋ด์ฉ์ ์ถ๊ฐํ๊ฑฐ๋ ์๋ก์ด ํ์ผ์ ์์ฑํ๋ ๊ฒ
1) ํ์ผ ์ถ๋ ฅ output
# 1. ํ
์คํธ ํ์ผ ์์ฑํ๊ธฐ
file = open('./output/hello.txt', 'wt')
# hello.txt์ ๊ธ ์ฐ๊ธฐ.
file.write('์๋
ํ์ธ์.')
file.write('\n') # ์ค ๋ฐ๊ฟ
file.write('๋ฐ๊ฐ์ต๋๋ค.')
file.write('\n')
print('hello.txt ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.') # ์งํ ์ํฉ์ ์๊ธฐ ์ํด์ ํ๋ฉด ์ถ๋ ฅ.
file.close()
# 2. ํ
์คํธ ํ์ผ์ ๋ด์ฉ ์ถ๊ฐํ๊ธฐ
# ๊ธฐ์กด ํ์ผ์ ๋ด์ฉ์ ์ถ๊ฐํ ์ ์๋ ๋ชจ๋๋ a ๋ชจ๋
file = open('./output/hello.txt', 'at')
file.write('Hello.\n')
file.write('Nice to meet you.\n')
print('hello.txt ํ์ผ์ ์๋ก์ด ๋ด์ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค.')
file.close()
2) ํ์ผ ์ ๋ ฅ input
1) read() ๋ฉ์๋
๐ ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ค์ด๋ ๋ฉ์๋
๐ ํ
์คํธ ๋ชจ๋์ ๋ฐ์ด๋๋ฆฌ ๋ชจ๋์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์
file.read(size)
๐พ ๋ฐํ๊ฐ : ํ
์คํธ ๋ชจ๋ - ์ฝ์ด ๋ค์ธ ๋ฌธ์์ด, ๋ฐ์ด๋๋ฆฌ ๋ชจ๋ - ์ฝ์ด ๋ค์ธ ๋ฐ์ดํธ์ด
๐พ ๋งค๊ฐ๋ณ์ size : ํ
์คํธ ๋ชจ๋- ์ฝ์ด ๋ค์ผ ์ต๋ ๋ฌธ์์ ๊ฐ์, ๋ฐ์ด๋๋ฆฌ ๋ชจ๋- ์ฝ์ด ๋ค์ผ ์ต๋ ๋ฐ์ดํธ ์
๐พ ๋งค๊ฐ๋ณ์ size ์๋ต : ํ์ผ ์ ์ฒด ์ฝ์
๐พ ํ์ผ์ ๋์ ๋๋ฌ : ๋น ๋ฌธ์์ด ('') ๋ฐํ
file = open('./input/hello.txt', 'rt', encoding='cp949')
str = file.read() # ํ์ผ ์ ์ฒด๋ฅผ ํ ๋ฒ์ ์ฝ์ด ๋ค์
print(str, end='')
file.close()
๐ก 'encoding = cp949' ๋ ๋งฅ os ์์ ํ์ผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
2) readline() ๋ฉ์๋
๐ ํ
์คํธ ํ์ผ์ ํ ์ค์ฉ ์ฝ์ด์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋
๐ ํ์ผ์ด ์ข
๋ฃ๋์ด ๋ ์ด์ ์ฝ์ด ๋ค์ผ ๊ธ์๊ฐ ์์ผ๋ฉด ๋น ๋ฌธ์์ด('')์ ์ฝ์ด ๋ค์
๐ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด์ ์ฌ๋ฌ ๋ฒ ์ฝ์ด ๋ค์ด์ผ ํ์ผ ์ ์ฒด๋ฅผ ์ฝ์ด ๋ค์ผ ์ ์์
file = open('./input/hello.txt', 'rt', encoding='cp949')
while True:
str = file.readline()
if str == '':
break
print(str, end='')
file.close()
3) readlines() ๋ฉ์๋
๐ ๋ผ์ธ line ํ๋๊ฐ ์๋๋ผ ์ ์ฒด ๋ผ์ธ lines์ ๋ชจ๋ ์ฝ์ด ๊ฐ ๋ผ์ธ line ๋จ์๋ก ๋ฆฌ์คํธ์ ์ ์ฅํ๋ ๋ฉ์๋
file = open('input/hello.txt', 'rt', encoding='cp949')
line_list = file.readlines()
print(line_list) # ['์๋
ํ์ธ์.\n', '๋ฐ๊ฐ์ต๋๋ค.\n', 'Hello.\n', 'Nice to meet you.\n']
for line in line_list:
print(line, end='')
file.close()
# enumrate() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋ผ์ธ ๋ฒํธ line number ๋ ํจ๊ป ์ถ๋ ฅํ ์ ์๋ค
file = open('input/hello.txt', 'rt', encoding='cp949')
line_list = file.readlines()
for no, line in enumerate(line_list):
print('{} {}'.format(no + 1, line), end='')
file.close()
# sys ๋ชจ๋์ ์ด์ฉํ๋ฉด ๋ณด๋ค ์ฝ๊ฒ ํ์ผ์ ์ฝ์ ์ ์๋ค
# sys ๋ชจ๋์๋ ํ์ค ์
์ถ๋ ฅ์ ์ํ stdin๊ณผ stdout ๊ฐ์ฒด๊ฐ ํฌํจ
# stdout์ ์ถ๋ ฅ์ ์ํ ๊ฐ์ฒด์ด๋ฉฐ ํ๋ฉด ์ถ๋ ฅ ๋ฉ์๋์ธ write()์ writelines() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์
# writelines() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์คํธ์ ๊ฐ์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๊ฐ ์์๋ฅผ ํ ์ค์ฉ ์๋์ผ๋ก ์ถ๋ ฅ
import sys
file = open('input/hello.txt', 'rt', encoding='cp949')
line_list = file.readlines()
sys.stdout.writelines(line_list)
file.close()
6. pickle
๐ ํ
์คํธ๊ฐ ์๋ ์๋ฃํ (๋ฆฌ์คํธ๋ ๋์
๋๋ฆฌ ์๋ฃํ๋ฑ)์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฉ์
๐ import pickle์ ํตํ์ฌ ๋ชจ๋ ์ํฌํธ๊ฐ ํ์
๐ pickle๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ๋๋ ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ฝ๊ฑฐ๋ ์จ์ผํจ (wb, rb)
๐ ๋ชจ๋ ํ์ด์ฌ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ์ฝ์ ์ ์์
import pickle
data = {
'a': [1, 2.0, 3, 4 + 6j],
'b': ("character string", "byte string"),
'c': {None, True, False}
}
print(type(data)) # <class 'dict>
# 1. ์ผ๋ฐ ํ
์คํธ ํ์ผ ํ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
# ์ ์ฅ
with open('./output/data.txt', 'w') as file:
# file.write(data) # TypeError: write() argument must be str, not dict
file.write(str(data)) # write() ๋ฉ์๋์ ์ธ์๋ ๋ฌธ์์ด์ด์ด์ผ ํจ.
# ์ฝ๊ธฐ
with open('./output/data.txt', 'r') as file:
data_output = file.read()
print(data_output)
# {'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', 'byte string'),
# 'c': {False, True, None}}
print(type(data_output)) # <class 'str'>
# 2. pickle ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
# ์ ์ฅ
with open('./output/data.my_pickle', 'wb') as file:
pickle.dump(data, file)
# ์ฝ๊ธฐ
with open('./output/data.my_pickle', 'rb') as file:
data_output = pickle.load(file) # ์ฝ์.
print(data_output)
# {'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', 'byte string'),
# 'c': {False, True, None}}
print(type(data_output)) # <class 'dict'>
print(data_output.get('a')) # [1, 2.0, 3, (4+6j)]
[ ๋ด์ฉ ์ฐธ๊ณ : IT ํ์ ๊ฐ์ ]