์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ์ •์ˆ˜, ์‹ค์ˆ˜, ๋ฌธ์ž์—ด ๋“ฑ์„ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ค‘์— ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ํฐ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ์ˆ˜์‹œ๊ฐ„ ์ˆ˜๋…„๋™์•ˆ ์Œ“์—ฌ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ทจ๊ธ‰ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ์˜ ์ „์›์ด ๊บผ์ ธ๋„ ์œ ์ง€๋˜๋Š” ๋””์Šคํฌ์˜ ํ™”์ผ ์‚ฌ์šฉ์€ ํ•„์ˆ˜์ ์ด๋‹ค.

ํŒŒ์ผ ์—ด๊ธฐ, ๋‹ซ๊ธฐ

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']]

์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ ์€,

  1. ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ค„์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋นˆ string ์ด๋‹ค.
  2. ์ด ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ œ์–ดํ•ด์•ผ ํ•œ๋‹ค.
  3. ๋˜ 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])