겉바속촉

[PYTHON] 파이썬_CSV 본문

IT 일기 (상반기)/PYTHON

[PYTHON] 파이썬_CSV

겉바속촉 2021. 1. 10. 19:52
728x90
반응형

 

 

안녕하세요

겉바속촉입니다

!^^!

 

 

!!파이썬 시작하기!!

 

 

 

 

이번에는

CSV에 대해서

알아보도록 하겠습니다.

 

 

 

 


 

 

 

CSV

 

  • Comma Separated Value
  • 즉, 콤마를 이용해서 구분하는 것
  • 파이썬에서는 쉽게 csv 파일을 조작할 수 있도록 csv 모듈을 제공

 

 

CSV 파일 읽기

 

다음과 같이 엑셀 열어서 파일 하나를 만들었습니다:)

 

 

 

 

그리고 저장을 할때 현재 vscode에서 작업 중인 폴더에 저장을 해줄거에요

data.csv로 말이죠!!!

형식 역시 csv로 해줄게요

 

 

 

그리고 vscode로 갔더니 다음과 같이 들어와 있습니다

 

 

눌러봤더니 다음과 같이 깨져있네요

하지만 쉼표로 구분해서 저장되어있다는 것은 알 수 있죠?!

 

 

ㅎㅎㅎ 연습해봐야하니까 다음과 같이 그냥 고쳐줄게요:)

 

 

이번에는 csv가 아니라 엑셀 데이터로 만들어볼게요

 

 

그럼 다음과 같이 뜨고 그래도 열면 모두 깨져서 옵니다

 

 

그래서 압축했다가 풀면 우리가 원하는 데이터들이 있긴 하지만

가공과 추출이 어려운 형태로 되어있어

 

csv 형식의 파일을 사용하는 것입니다

 

 

 

 


 

 

 

 

csv 파일 읽기

 

csv_reader.py

 

다음과 같이 data에 행별로 읽어 각각 출력해보겠습니다

import csv

#csv 모듈을 이용한 cvs 파일 처리
with open('data.csv', 'r', encoding='utf-8') as csv_file:
    csv_data = csv.reader(csv_file)
    print(csv_data)
    for data in csv_data:
        print(data)
        

 

리스트에 넣기 전과 후는 다음과 같아요

넣기 전을 보니 그냥 객체군요!!

 

 

이제 리스트에 담긴 각 행을 데이터로 가져오려면

다시 for ~ in~ 을 사용해주어야 합니다

 

import csv

#csv 모듈을 이용한 cvs 파일 처리
with open('data.csv', 'r', encoding='utf-8') as csv_file:
    csv_data = csv.reader(csv_file)
    print(csv_data)
    for data in csv_data:
        for d in data:
            print(d, end='\t')
        print()
        

 

그리고 출력해보면~

 

 

그냥 파일을 읽어오는 것과 동일하긴 하지만

차이점은 csv모듈을 사용하지 않고 읽어오려면 파싱을 해주어야 합니다

그럼 csv모듈 없이 연습해볼게요

 

 

다음 코드를 추가해서 출력할게요

#일반적인 파일 처리 방식으로 csv 파일 처리
with open('data.csv','r', encoding='utf-8') as csv_file:
    for line in csv_file:
        print(line)

 

 

 

그래서 최종 코드

 

import csv

#csv 모듈을 이용한 cvs 파일 처리
with open('data.csv', 'r', encoding='utf-8') as csv_file:
    csv_data = csv.reader(csv_file)
    for data in csv_data:
        for d in data:
            print(d, end='\t')
        print()

        
        
#일반적인 파일 처리 방식으로 csv 파일 처리
with open('data.csv','r', encoding='utf-8') as csv_file:
    for line in csv_file:
        data = line.strip().split(',')
        for d in data:
            print(d, end='\t')
        print()

 

 

 

즉 콤마(,)를 구분자(delimiter)로 하여 파싱!!!

 

 


 

 

CSV 파일 저장

 

 

반대로 txt파일을 CSV파일로 만들어볼게요

 

 

위에서 한 과정은 CSV파일을 이용해서 읽어왔지만

일반적으로 읽어내어 CSV파일로 만드는 거죠!!!

 

 

 

우선 input_data.txt 파일을 저장해줄게요

 

 

 

보통 다음과 같은 형태를 csv로  해주려면

 

1,2,3,4

5,6,7,8

9,0

 

먼저 각각 리스트로 되어있어야하고

 

[1,2,3,4]

[5,6,7,8]

[9,0]

 

그게 또 전체의 리스트에들어있어야합니다

 

[

[1,2,3,4]

[5,6,7,8]

[9,0]

]

 

이런 형태가 되어야만 csv모듈을 이용해서 csv파일에 넣어줄 수 있습니다

 

 

 

csv_writer.py 를 다음과 같이 만들었습니다

import csv

with open('input_data.txt', 'r', encoding='utf-8') as input_txt_file, \
    open('output_data.csv', 'w', encoding='utf-8') as output_csv_file:

    lines = input_txt_file.readlines()

    csv_format = []
    for line in lines:
      
        print(line.strip().split())

 

 

완성 전이지만 실행시켜보니 일단 각 줄이 다음과 같이 리스트로 만들어졌어요

 

 

그리고 다음과 같이 해주면~

import csv

with open('input_data.txt', 'r', encoding='utf-8') as input_txt_file, \
    open('output_data.csv', 'w', encoding='utf-8') as output_csv_file:

    lines = input_txt_file.readlines()      #모든 라인을 데이터로 읽어오기

    csv_format = []                         #전체를 담아줄 리스트
    for line in lines:
        csv_format.append(line.strip().split())
    print(csv_format)

 

하나의 리스트 안에 각 줄의 리스트들이 들어가있습니다.

 

 

 

 

이제 마저 완성시켜볼게요:)

 

csv_writer.py

import csv

with open('input_data.txt', 'r', encoding='utf-8') as input_txt_file, \
    open('output_data.csv', 'w', encoding='utf-8') as output_csv_file:

    lines = input_txt_file.readlines()

    csv_format = []
    for line in lines:
        csv_format.append(line.strip().split())

    csvobject = csv.writer(output_csv_file, delimiter = ',')    #output_csv_file 이라는 객체를 콤마를 기준으로 데이터 구분해서 write할 것
    csvobject.writerows(csv_format)
    

       

 

 

결과는 output_data.csv 가 생성되어있겠쥬??

 

 

구분자를 콤마 말고 |  <--- 얘로 해봤더니

다음과 같이 출력이 잘 되고 있습니다:)

 

 

 

이번에는

 

csv 모듈을 이용하지 않고, 위의 과정을 구현해 볼게요:)

즉, input_data.txt 파일을 읽어서 output_data.csv 파일 형식으로 출력하기

 

input_dat.txt

이름   국어    영어    수학    물리    지구과학
홍길동  100     90      80      22      92
길동홍  80      52      90      45      67
동홍길  56      98      33      58      70

 

다음과 같이 작성해서 실행!!

with open ('input_data.txt', 'r', encoding='utf-8') as input_txt_file, \
    open ('output_data.csv', 'w', encoding='utf-8') as output_csv_file:
    
    for line in input_txt_file:
        datas = line.strip().split()        

      
        for i in range(len(datas)):
            output_csv_file.write('{}'.format(datas[i]))
            if i != len(datas) - 1:
                output_csv_file.write(',')
        output_csv_file.write('\n')
      
            

 

짜라란 다음과 같이 나옵니다:)

 

 

 

 

 

 

728x90
반응형