์ปดํจํฐ๋ฅผ ํตํ ๋ฌธ์ ํด๊ฒฐ์ ์ํด์ ์ฐ๋ฆฌ๋ ์ ์, ์ค์, ๋ฌธ์์ด ๋ฑ์ ํ๋ก๊ทธ๋จ ์คํ์ค์ ๋ง๋ค์ด์ ์ฌ์ฉํ์๋ค. ํ์ง๋ง ์ค์ ํฐ ํ๋ก๊ทธ๋จ๋ค์ ์์๊ฐ ์๋ ๋์ ์์ฌ์ง ๋ฐ์ดํฐ๋ฅผ ์ทจ๊ธํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ปดํจํฐ์ ์ ์์ด ๊บผ์ ธ๋ ์ ์ง๋๋ ๋์คํฌ์ ํ์ผ ์ฌ์ฉ์ ํ์์ ์ด๋ค.
ํ์ผ ์ด๊ธฐ, ๋ซ๊ธฐ
Python๊ณผ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ํ์ผ์ ์ด๊ณ ๋ซ๋ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋๋ฐ, ์ฐ ํ์ผ์ ๋ฐ๋์ ๋ซ์์ผ ํ๋ค. ์ด๊ธฐ๋ง ํ๊ณ ๋ซ์ง ์์ ํ์ผ์ ํ๋ก๊ทธ๋จ์ ๋์์์ ์์
ํ ๋ด์ฉ์ด ์ ๋๋ก ๋ฐ์์ด ์๋๊ฑฐ๋, ์ต์
์ ๊ฒฝ์ฐ๋ ํ์ผ์ ์ค๋ฅ๊ฐ ์๊ฒจ์ ์ฌ์ฉ์ด ๋ถ๊ฐํ ์๋ ์๋ค. Python์์ ํ์ผ์ ์ฌ๋ ๋ฌธ๋ฒ์ open() ํจ์์ด๋ค. ๋ฐ๋๋ก ๋ซ๋ ๋ฌธ๋ฒ์ close() ํจ์์ด๋ค.
file = open('filename.csv', 'r')
file.close()๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋, ํ์ผ์ ์ฌ๋ ์ฉ๋๋ฅผ ์๋ฏธํ๋ค. 'r'์ read-only๋ฅผ ์๋ฏธํ์ฌ, ์ฝ๊ธฐ๋ง ํ๊ณ ์์ ์ ๋ถ๊ฐ๋ฅํ๊ฒ ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์์ธํ ์ฌ์ฉ๋ฒ์, Input and Output ์ฌ๊ธฐ์ ๊ฐ๋ณด์.
ํ์ผ ํต์งธ๋ก ์ฝ๊ธฐ
file = open('filename.csv', 'r')
contents = file.read()
file.close()read() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฐ ํ์ผ์ ๋ํ ๋ชจ๋ ๋ด์ฉ์ ๋ฐ์์ฌ ์ ์๋ค.
with ๋ฌธ์ผ๋ก ํ์ผ ์ด๊ธฐ, ๋ซ๊ธฐ
close() ๋ฅผ ๊น๋จน๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ with๋ฌธ์ ์ฌ์ฉํด์ ํ์ผ์ ์ด๊ณ ๋ซ์ ์ ์๋ค.
with open('filename.csv', 'r') as file:
contents = file.read()ID,Python,C++,Javascript,Go
20190001,A,A,A,A
20190002,A,B,A,C
20190003,C,B,C,A
ํ์ผ ํ ์ค์ฉ ์ฝ๊ธฐ
ํ์ผ ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ์๊ฒ ์ฌ์ฉํ๋ ค๋ฉด, ํ์ผ์ ๋ด์ฉ์ ํ์ค์ฉ ์ฝ์ด์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ฉ์ดํ ํํ๋ ๋ฐ๊พธ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.filename.csv๋ ์์ธํ ์ดํด๋ณด๋ฉด, 2์ฐจ์ ํ
์ด๋ธ ํํ๋ก, ํ์ค์ ์ฌ๋ฌ 5๊ฐ์ ์์ดํ
์ด ์๋ ๋ฆฌ์คํธ ๋ชจ์์ผ๋ก ๋ณผ ์ ์๋ค.๋ฐ๋ผ์ Python ์์์ ์์ดํ
์ 5๊ฐ ๊ฐ๋ ๋ฆฌ์คํธ๋ค์ ์งํฉ(List in Lists)์ผ๋ก ๋ณด๋ฉด ์๋ฏธ์๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
with ๋ฌธ ์ด์ฉ
fileMatrix = []
with open('filename.csv', 'r') as file:
for lineContent in file: # Point.1
fileMatrix.append(lineContent.strip('\n').split(',')) # Point.2
print(fileMatrix)[['ID', 'Python', 'C++', 'Javascript', 'Go'], ['20190001', 'A', 'A', 'A', 'A'], ['20190002', 'A', 'B', 'A', 'C'], ['20190003', 'C', 'B', 'C', 'A']]
Point.1๋ก ๋ช
์ํ ๋ถ๋ถ์ ์์ for ๋ฐ๋ณต๋ฌธ์์ ์ฌ์ฉํ ๋ฌธ๋ฒ์ ์ ์ฌํ ์๋ฏธ๋ฅผ ๊ฐ๋๋ฐ, file์์ ํ์ค์ฉ ์ฝ์ด์ lineContent ๋ฌธ์์ด์ ๋ฃ๋๋ค๋ ์๋ฏธ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด, \n ์ ๊ธฐ์ค์ผ๋ก ํ์ค ์ฉ ๊ฐ์ ธ์จ๋ค. Point.2 ๋ฅผ ๋ณด๋ฉด,
lineContent.strip('\n')์ ํ์ผ์์ ์ฝ์ ํ์ค์์ '\n'๋ฅผ ์ ๊ฑฐํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ ํ
์คํธ ํ์ผ์์ ์ค์ด ๋ฐ๋๋ ๋ถ๋ถ์์ ์ค ๋ฐ๊ฟ ํน์ ๊ธฐํธ์ธ '\n'์ด ์ฝ์
๋๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ์ ์๋ ์๋ฏธ์ ์๊ด ์์ผ๋ ์ ๊ฑฐํ๋ค๋ ์๋ฏธ์ด๋ค.
.split(',')์ '\n'์ด ์ ๊ฑฐ๋ ์ค์์, ๋ค์ , ๊ธฐํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋๋ค ๋ฆฌ์คํธ์ ๋ฃ์ด ๋ฐํํ๋ผ๋ ์ฝ๋์ด๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ํ์ผ์ 20190001,A,A,A,A๋ ๊ฒฐ๊ตญ ๋ค์ฏ๊ฐ์ ์์ดํ
์ ๊ฐ๋ ๋ฆฌ์คํธ๋ก ๋ณํฉ๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ค์ fileMatrix ๋ฆฌ์คํธ์ ์์๋ก ํ๋์ฉ ๋ฃ๋๋ค.
Default open(), close() ์ด์ฉ
์์ ์ฝ๋๋ฅผ open, close๋ฅผ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
fileMatrix = []
file = open('filename.csv', 'r')
lineContent = file.readline()
while lineContent != '':
fileMatrix.append(lineContent.strip('\n').split(','))
lineContent = file.readline()
print(fileMatrix)
file.close()[['ID', 'Python', 'C++', 'Javascript', 'Go'], ['20190001', 'A', 'A', 'A', 'A'], ['20190002', 'A', 'B', 'A', 'C'], ['20190003', 'C', 'B', 'C', 'A']]
์ฌ๊ธฐ์ ์ ์ ์๋ ์ ์,
- ์๋ฌด๊ฒ๋ ์๋ ์ค์ ๊ฐ์ ธ์ค๋ฉด ๋น string ์ด๋ค.
- ์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์ดํด์ผ ํ๋ค.
- ๋
readline()ํจ์๋ฅผ ํธ์ถํ๋ฉด ๊ทธ ๋ค์์ค์ ์ฝ์ด ์จ๋ค.
๊ธฐ์กด ํ์ผ์ ์ถ๊ฐํ๊ธฐ
๊ธฐ์กด ํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ open ํ ๋, ๋๋ฒ์งธ ์
๋ ฅ ํ๋ผ๋ฏธํฐ์ a ๋ฅผ ์ค์ผํ๋ค. append ์ ์ฝ์์ด๋ค.
์ด ๋, ํ์ผ์ ์ฐ๋ ๊ฒ์ด๋ w ๋ฅผ ์ฐ๋ฉด ํฐ์ผ ๋๋ค. ์ปดํจํฐ๋ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ํ์ผ ์ด๋ฆ์ ํด๋น ํ๋ ํ์ผ์ ๊ทธ๋ฅ ์จ๋ฒ๋ฆฐ๋ค ์ด ์๊ธฐ๊ฐ ๋ญ๋๋ฉด ๋ฎ์ด์ด๋ค ๋ ์ด์ผ๊ธฐ์ด๋ค. ์ด๋ ํ ๊ฒฝ๊ณ ๋ ์์ด ๋ฎ์ด์จ ๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ฃผ์ํ ํ์๊ฐ ์๋ค.
with open('filename.csv', 'r') as file:
contents = file.read()
print("[Before append]")
print(contents)
with open('filename.csv', 'a') as file: # Point.1
file.write("20190004,B,B,B,B\n") # Point.2
with open('filename.csv', 'r') as file:
contents = file.read()
print("[After append]")
print(contents)[Before append]
ID,Python,C++,Javascript,Go
20190001,A,A,A,A
20190002,A,B,A,C
20190003,C,B,C,A
[After append]
ID,Python,C++,Javascript,Go
20190001,A,A,A,A
20190002,A,B,A,C
20190003,C,B,C,A
20190004,B,B,B,B
ํ์ผ ์ฐ๊ธฐ
์์ ์์์ ๋ณธ ํ์ผ์ ์ฌ์ค ์ ๋ณด๊ฒ ๋๋ฉด, ํ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ธ์ด์ ๋ํ ์ฑ์ ์ ์๋ฏธํ๊ณ ์๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ HTML, CSS ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ฑ์ ์ญ์ ๋ํ๋ด๊ณ ์ถ๋ค. ์์ง ์ํ์ ์น๋ฅด์ง ์์์ผ๋ฏ๋ก ๊ณต๋์ผ๋ก ๋๊ณ ์ถ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ์ผ๋ก ํด๊ฒฐ ํ ์ ์๋ค. ์๋๋ฉด ์ฐ๋ฆฌ๋ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์ด ๋ง์ง๋ง์ ์ถ๊ฐํ๋ ๊ฒ๋ง ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ธฐ์กด ํ์ผ์ ์ฝ์ด์ ์ถ๊ฐ์ ์ธ ์์
์ ํ๊ณ , ๋ค์ ์ด๋
์์ ํ์ผ์ ๋ฃ์ด์ค ํ์๊ฐ ์๋ค. ์ด ๋ ํ์ํ ๊ฒ์ด ํ์ผ ์ฐ๊ธฐ ์ด๋ค.
import csv
# ์์ ์์์ ํ์ผ์ string์ผ๋ก ๋ถํฐ list๋ก ๋ง๋ค์ด ๋ค๋ฃฐ ์ ์๊ฒ ํ๋ค.
# ๊ทธ๋ฐ๋ฐ ํ์ผ์ ๋ด๊ฐ ์ฐ๋ ค๋ฉด, ๋ค์ list๋ก ๋ถํฐ string์ผ๋ก ๋ง๋ ๋ค ๋ฃ์ด์ค์ผ ํ๋ค.
# ๊ทธ ์์
์ด ๋๋ฌด ๊ท์ฐฎ๋ค.. ๊ทธ๋์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ๊ณ ํจ์๋ฅผ ๊ฐ์ ธ๋ค ์ฐ์.
fileMatrix = []
# ํ์ผ์ ๋ฆฌ์คํธ๋ก ์ ๋ฆฌํด์ค ํฐ ๋
์์ ๋ง๋ค์.
with open('filename', 'r') as fileRead:
for lineContent in fileRead:
fileMatrix.append(lineContent.strip('\n').split(','))
# fileMatrix์ ๋ด๊ฐ ์ํ๋ ํ์ผ์ ๋ฆฌ์คํธ ํํ๋ก ์ ๋ฆฌํด ๋์.
# ์ด๋ ๊ฒ csv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ํ๋ผ ์ ๋ ์๋ค.
#with open('Step_13_SampleFile_score.csv', 'r') as fileRead:
# fileReader = csv.reader(fileRead)
# for line in fileReader:
# fileMatrix.append(line)
print("[Before]")
print(fileMatrix)
fileMatrix[0].extend(["HTML5", "CSS3"])
# Array ์์์์ฒด๋ฅผ ์ถ๊ฐํ๋ค.
# Array์ํ๋ก ์ถ๊ฐํ๋ ๊ฒ์ด ์๋
lenFileMatrix = len(fileMatrix)
# fileMatrix Array์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
for i in range(lenFileMatrix - 1):
i = i + 1
fileMatrix[i].extend(["_", "_"])
# ์์ง ์ฑ์ ์ด ์
๋ ฅ์ด ์๋์ด ์์ผ๋ฏ๋ก, ๋ค ์ด๊ธฐํ ํด์ค๋ค.
print("[After]")
print(fileMatrix)
with open('Step_13_SampleFile_newScore.csv', 'w') as fileWrite:
myWriter = csv.writer(fileWrite)
for i in range(lenFileMatrix):
myWriter.writerow(fileMatrix[i])
# ์ฌ๊ธฐ์ csv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์จ ์ด์ ๊ฐ ๋์จ๋ค.
# ๋จผ์ , ๋ด๊ฐ ์ธ ํ์ผ์ 'w' ๋ก ์ฐ๋ค.
# ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ฒด๋ฅผ csv.writer ๋ผ๋ ๊ฐ์ฒด์ input์ผ๋ก ์ฃผ๊ณ ,
# ํด๋น ๊ฐ์ฒด๋ฅผ mywriter๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ๋๋ค.
# ์ด์ ๋ด๊ฐ ๋ง๋ค์๋, fileMatrix array์ ์์์์๋ค์ ์จ์ค์ผ ํ๋ค.
# for ๋ฌธ์ ๋๋ฉด์, ์๊น ๋ง๋ค์๋ myWriter ๊ฐ์ฒด์ writerow ๊ฐ์ฒด์ input์ผ๋ก
# ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.['ID', 'Python', 'C++', 'Javascript', 'Go']
['20190001', 'A', 'A', 'A', 'A']
['20190002', 'A', 'B', 'A', 'C']
['20190003', 'C', 'B', 'C', 'A']
['20190004', 'B', 'B', 'B', 'B']
[Before]
[['ID', 'Python', 'C++', 'Javascript', 'Go'], ['20190001', 'A', 'A', 'A', 'A'], ['20190002', 'A', 'B', 'A', 'C'], ['20190003', 'C', 'B', 'C', 'A'], ['20190004', 'B', 'B', 'B', 'B']]
[After]
[['ID', 'Python', 'C++', 'Javascript', 'Go', 'HTML5', 'CSS3'], ['20190001', 'A', 'A', 'A', 'A', '_', '_'], ['20190002', 'A', 'B', 'A', 'C', '_', '_'], ['20190003', 'C', 'B', 'C', 'A', '_', '_'], ['20190004', 'B', 'B', 'B', 'B', '_', '_']]
์ฃผ์ ์๋ ์์ค์ฝ๋
import csv
fileMatrix = []
with open('SampleFile.csv', 'r') as myfile:
read_file = csv.reader(myfile)
for line in read_file:
fileMatrix.append(line)
print("[Before]")
print(fileMatrix)
lenfileMatrix = len(fileMatrix)
for i in (1, lenfileMatrix-1):
fileMatrix[i].extend(["_", "_"])
print("[After]")
print(fileMatrix)
with open('SampleFile_new.csv', 'w') as newfile:
write_file = csv.writer(newfile)
for i in range(lenfileMatrix):
write_file.writerow(fileMatrix[i])