๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ํ์ผ ์ ์ถ๋ ฅ์ ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ํนํ CSV์ JSON์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ตํํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ python์ ์ฌ์ฉํ์ฌ CSV์ JSON ํ์ผ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
1. csv ํ์ผ ์ ์ถ๋ ฅ๐
csv ํ์ผ์ ํ ์คํธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ณผ ์ด๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ ํ์์ ๋๋ค. csv ํ์ผ์ ์ฝ์ ํ ํ์ผ ์์ ์๋ ๋ด์ฉ์ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
# csv ํ์ผ ์ฝ๊ธฐ
student_list = [] # ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค
# './csvfile/ํ์๋ช
๋จ.csv' ๊ฒฝ๋ก์ ํ์ผ์ ์ฝ๊ธฐ ๋ชจ๋('rt')๋ก ์ด๊ณ 'file' ๋ณ์์ ํ ๋นํ๋ค
with open('./csvfile/ํ์๋ช
๋จ.csv', 'rt') as file:
file.readline() # ์๋จ์ ์ ๋ชฉ ์ค์ ์ฝ์ด ๊ฑด๋๋ด๋ค
while True: # ๋ฌดํ ๋ฃจํ ์์
line = file.readline() # ํ ์ค์ฉ ์ฝ์ด line ๋ณ์์ ํ ๋นํ๋ค
if not line: # ๋ง์ฝ ๋ ์ด์ ์ฝ์ ๋ผ์ธ์ด ์๋ค๋ฉด
break # ๋ฃจํ๋ฅผ ์ข
๋ฃํ๋ค
student = line.split(',') # ,๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ์ฌ ๋ฆฌ์คํธ 'student'์ ์ ์ฅํ๋ค
student_list.append(student) # ๋ถ๋ฆฌํ ํ์ ์ ๋ณด๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค
print(student_list) # ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ค
๋จผ์ ์ฃผ์ด์ง ๊ฒฝ๋ก์ ์๋ csv ํ์ผ์ ์ด๊ณ , csv ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ค(์ ๋ชฉ ์ค)์ ๊ฑด๋๋ด ํ ๋๋จธ์ง ๋ด์ฉ์ ์ฝ์ด์์ ๊ฐ ์ค์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ๋ฆฌ์คํธ์ ์ ์ฅํ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ก ์ป์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
ํ์ด์ฌ์์ ํ์ผ์ ์ฝ์ด์ค๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ถ๊ธํ์๋ค๋ฉด ์ง๋ ํ์ผ ์ ์ถ๋ ฅ ํฌ์คํ ์ ํ์ธํด ์ฃผ์ธ์๐
ํ์ด์ฌ์์๋ csv๋ชจ๋์ ์ฌ์ฉํ์ฌ csv ํ์ผ์ ์ฝ๊ฒ ์ฝ๊ณ ์ธ ์๋ ์์ต๋๋ค. ๋ค์์ ๋์ผํ csv ํ์ผ์ csv ๋ชจ๋์ ์ด์ฉํ์ฌ ์ฝ๊ณ ์ฐ๋ ๊ฐ๋จํ ์์ ์ฝ๋์
๋๋ค.
import csv
# csv ํ์ผ ์ฝ๊ธฐ
student_list = [] # ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค
# './csvfile/ํ์๋ช
๋จ.csv' ๊ฒฝ๋ก์ ํ์ผ์ ์ฝ๊ธฐ ๋ชจ๋('rt')๋ก ์ด๊ณ 'file' ๋ณ์์ ํ ๋นํ๋ค
with open('./csvfile/ํ์๋ช
๋จ.csv', 'rt', newline='') as file:
csv_reader = csv.reader(file) # CSV ๋ฆฌ๋ ๊ฐ์ฒด ์์ฑ
next(csv_reader) # ์ฒซ ๋ฒ์งธ ์ค(์ ๋ชฉ ์ค)์ ๊ฑด๋๋ด๋ค
for line in csv_reader: # CSV ํ์ผ์ ๊ฐ ์ค์ ๋ํด ๋ฐ๋ณต
student_list.append(line) # ๊ฐ ์ค์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค
# csv ํ์ผ ์ฐ๊ธฐ (๋ฐ์ดํฐ ์ถ๊ฐ)
new_data = ["์ธ์ข
๋์", "010-6666-6666"]
# ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
student_list.append(new_data)
# ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ค
print(student_list)
2. jsonํ์ผ ์ ์ถ๋ ฅ๐
JSON ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ๋ก ํํํ๋ ๊ฒฝ๋์ ๋ฐ์ดํฐ ๊ตํ ํ์์ ๋๋ค. ํ์ด์ฌ์์๋ json ๋ชจ๋์ ์ฌ์ฉํ์ฌ JSON ํ์ผ์ ์ฝ๊ฒ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. ๋ค์์ JSON ํ์ผ์ ์์ฑํ๋ ์์ ์ฝ๋์ ๋๋ค.
import json
# ๋์
๋๋ฆฌ ๋ฆฌ์คํธ ์์ฑ
dict_list = [
{
'name': 'emma', # ํ์ ์ด๋ฆ
'school': 'Central High School', # ํ๊ต ์ด๋ฆ
'grade/class': [3, 1] # ํ๋
/๋ฐ
},
{
'name': 'alice', # ํ์ ์ด๋ฆ
'school': 'Seoul Girls Middle School', # ํ๊ต ์ด๋ฆ
'grade/class': [2, 2] # ํ๋
/๋ฐ
}
]
# ๋์
๋๋ฆฌ ๋ฆฌ์คํธ๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํ(์ธ์ฝ๋ฉ)
json_string = json.dumps(dict_list)
# JSON ํ์ผ๋ก ์ ์ฅ
with open('./jsonfile/dictList.json', 'wt') as file:
file.write(json_string) # JSON์ผ๋ก ์ธ์ฝ๋ฉํ ๋ด์ฉ์ JSON ํ์ผ์ ์ด๋ค
print('dictList.json ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.')
์ฃผ์ด์ง ๋์
๋๋ฆฌ ๋ฆฌ์คํธ๋ฅผ JSON ํ์์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ , ๊ทธ ๋ฌธ์์ด์ JSON ํ์ผ์ ์๋๋ค. ๋จผ์ json.dumps()๋ฅผ ์ฌ์ฉํ์ฌ ๋์
๋๋ฆฌ ๋ฆฌ์คํธ๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ํ์ผ์ ์๋๋ค. ๊ทธ ํ์ ์ถ๋ ฅ๋ฌธ์ ํตํด ํ์ผ์ด ์์ฑ๋์์์ ์๋ ค์ค๋๋ค.
# json ํ์ผ ์ฝ๊ธฐ
import json
with open('./jsonfile/dictList.json', 'rt') as file:
json_reader = file.read() # ํ์ผ ์ ์ฒด ์ฝ์ด json_reader์ ์ ์ฅ
dict_list = json.loads(json_reader) # JSON์ ํ์ด์ฌ ๊ฐ์ฒด๋ก ๋ณํ (๋์ฝ๋ฉ)
# ๋ณํ๋ ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉฐ ๊ฐ ๋์
๋๋ฆฌ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅ
for dic in dict_list:
print('์ด๋ฆ: {}'.format(dic['name']))
print('ํ๊ต: {}'.format(dic['school']))
print('ํ๋
/๋ฐ: {}'.format(dic['grade/class'][0]), end=' / ')
print(dic['grade/class'][1])
print('----------------')
์ด๋ฒ์๋ ์ฃผ์ด์ง ๊ฒฝ๋ก์ ์๋ JSON ํ์ผ์ ์ฝ์ด์ ํ์ด์ฌ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ , ๋ณํ๋ ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉฐ ๊ฐ ํญ๋ชฉ์ ์ถ๋ ฅํฉ๋๋ค.
3. ์์ฉ ์์ ๐
์๋๋ ์ฌ์ฉ์๋ก๋ถํฐ ํ์ผ๋ช ์ ์ ๋ ฅ๋ฐ์์ ํด๋น ํ์ผ์ ๋ณต์ฌํ๋ ์ฝ๋์ ๋๋ค. ์ ๋ ฅ๋ ํ์ผ์ด 'txt' ํ์ฅ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ , 'txt' ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ์ผ ๊ฒฝ์ฐ ํด๋น ํ์ผ์ ์ฝ์ด์์ ๋ณต์ฌ๋ณธ ํ์ผ์ ์๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ณต์ฌ๋ณธ ํ์ผ์ด ์์ฑ๋์์์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค๋๋ค.
while True:
filename = input('๋ณต์ฌํ ํ์ผ๋ช
์ ์
๋ ฅํ์ธ์ >>> ') # ์ฌ์ฉ์๋ก๋ถํฐ ๋ณต์ฌํ ํ์ผ๋ช
์ ์
๋ ฅ ๋ฐ๋๋ค
extname = filename[filename.rfind('.') + 1:] # ํ์ผ๋ช
์์ ํ์ฅ์๋ฅผ ์ถ์ถํ๋ค
# ํ์ฅ์๊ฐ 'txt'๊ฐ ์๋๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ๋ค์ ํ์ผ๋ช
์ ์
๋ ฅ๋ฐ๋๋ค
if extname != 'txt':
print('๋ณต์ฌํ ์ ์๋ ํ์ผ์
๋๋ค.')
else:
break # 'txt' ํ์ฅ์์ธ ๊ฒฝ์ฐ ๋ฃจํ๋ฅผ ์ข
๋ฃํ๊ณ ํ์ผ ๋ณต์ฌ๋ฅผ ์งํํ๋ค
# ์๋ณธ ํ์ผ์ ์ฝ์ด์์ ๋ณต์ฌ๋ณธ ํ์ผ์ ์ฐ๋ ์์
์ ์ํํ๋ค
with open(filename, 'rt') as source: # ์๋ณธ ํ์ผ์ ์ฝ๊ธฐ ๋ชจ๋('rt')๋ก ์ด์ด์ source ๋ณ์์ ํ ๋นํ๋ค
with open('๋ณต์ฌ๋ณธ-' + filename, 'wt') as copy: # ๋ณต์ฌ๋ณธ ํ์ผ์ ์ฐ๊ธฐ ๋ชจ๋('wt')๋ก ์ด์ด์ copy ๋ณ์์ ํ ๋นํ๋ค
while True:
buffer = source.read(1) # ์๋ณธ ํ์ผ์์ 1๋ฐ์ดํธ์ฉ ์ฝ์ด buffer์ ์ ์ฅํ๋ค
์ด ์ฝ๋๋ ์์ธํน๋ณ์ ๊ฐ๋จ๊ตฌ์ ์ค์น๋ cctv์ ์ด๊ฐ์๋ฅผ ์ธ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. CSV ํ์ผ์ ์ฝ๊ณ , ๊ฐ ํ์ 7๋ฒ์งธ ์ด์ ์๋ ๊ฐ(์ค์น๋ cctv ๊ฐ์)์ ํฉ์ฐํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
import csv
# './csvfile/cctv.csv' ํ์ผ์ ์ฝ๊ธฐ ๋ชจ๋('rt')๋ก ์ด๊ณ ํ์ผ ๊ฐ์ฒด๋ฅผ csvfile์ ํ ๋นํ๋ค
with open('./csvfile/cctv.csv', 'rt') as csvfile:
# csv.reader๋ฅผ ์ฌ์ฉํ์ฌ csvfile์ ์ฝ๋๋ค. delimiter๋ ์ผํ(','), quotechar๋ ํฐ ๋ฐ์ดํ('"')๋ก ์ค์ ํ๋ค.
buffer = csv.reader(csvfile, delimiter=',', quotechar='"')
totalcctv = 0 # cctv ๊ฐ์๋ฅผ ์ ์ฅํ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ค
# enumerate() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๊ฐ ํ์ ๋ํด ๋ฐ๋ณตํ๋ค
for i, line in enumerate(buffer):
if i != 0: # ์ฒซ ๋ฒ์งธ ์ค์ ์ ๋ชฉ์ด๋ฏ๋ก ์ ์ธํ๋ค
totalcctv += int(line[6]) # ๊ฐ ํ์ 7๋ฒ์งธ ์ด(์ธ๋ฑ์ค 6)์ ์๋ ๊ฐ(์ค์น๋ cctv ๊ฐ์)์ totalcctv์ ๋ํ๋ค
# ์ค์น๋ cctv์ ์ด ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค
print('์์ธํน๋ณ์ ๊ฐ๋จ๊ตฌ์ ์ค์น๋ cctv๋ ์ด {}๊ฐ์
๋๋ค.'.format(totalcctv))
์ด๋ฒ์๋ 'cctv.json' ํ์ผ์์ ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ฌ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ , ๊ฐ ์ฅ์(place)์ '์ค์น๋ชฉ์ ๊ตฌ๋ถ'์ ์ธํธ์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ค๋ณต๋์ง ์๋ ๋ชฉ์ ๊ตฌ๋ถ์ด ์ธํธ์ ๋ด๊ฒจ ์ถ๋ ฅ๋ฉ๋๋ค.
import json
# './jsonfile/cctv.json' ํ์ผ์ ์ฝ๊ธฐ ๋ชจ๋('rt')๋ก ์ด๊ณ ํ์ผ ๊ฐ์ฒด๋ฅผ jsonfile์ ํ ๋นํ๋ค
with open('./jsonfile/cctv.json', 'rt', encoding='utf-8') as jsonfile:
buffer = jsonfile.read() # ํ์ผ ๋ด์ฉ์ ๋ฌธ์์ด๋ก ์ฝ์ด์จ๋ค
cctv_list = json.loads(buffer) # JSON ๋ฌธ์์ด์ ํ์ด์ฌ ๊ฐ์ฒด๋ก ๋ณํํ๋ค
cctv_purpose = set() # ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋น ์ธํธ๋ฅผ ์์ฑํ๋ค (์ค๋ณต ์ ์ธํ๊ธฐ ์ํด)
# cctv_list์ ๊ฐ ์ฅ์(place)์ ๋ํด ๋ฐ๋ณตํ๋ค
for place in cctv_list:
cctv_purpose.add(place['์ค์น๋ชฉ์ ๊ตฌ๋ถ']) # ๊ฐ ์ฅ์์ '์ค์น๋ชฉ์ ๊ตฌ๋ถ'์ ์ธํธ์ ์ถ๊ฐํ๋ค (์ค๋ณต๋ ๊ฐ์ ์ถ๊ฐ๋์ง ์๋๋ค)
print(cctv_purpose) # ์ค์น๋ cctv์ ๋ชฉ์ ๊ตฌ๋ถ์ ์ถ๋ ฅํ๋ค
4. ํต์ฌ ๋ด์ฉ๐