데이터 불러오는 방법에 대한 내용을 공부했다.

2.7버전을 기준으로 만들어진 책이라서 3버전으로 바꾸는데 고생하고 있다.


여기 나오는 내용은 '예제로 배우는 파이썬 데이터 시각화'의 코드(파이썬 2.7)를 

파이썬 3 코드로 바꾼 것이다.



============================ Python ============================

import csv


# 불러온 데이터 주소값 확인

filename = 'ch02-data.csv'

data = []

try:  # try - catch 를 try - except가 된 것이다.

    with open(filename) as f:  # csv파일을 f로 불러온다.

        reader = csv.reader(f)  # 불러온 파일을 csv.reader()로 reader 객체에 담아준다.

        print(reader)  # <_csv.reader object at 0x000000C78F7B1388> 주소값만 출력.

except csv.Error as e:

    print('에러남')






# 책에 나온 프로그램.

import csv

filename = 'ch02-data.csv'  # 가져올 파일 데이터.

data = []  # 파일 데이터를 담을 리스트 생성.

try:

    with open(filename, encoding="UTF-8") as f:  # csv파일을 f로 불러온다. 파일 내용에 한글이 있어서 encoding=을 했다.

                                                   # 영어, 숫자로만 되어있으면 encoding이 필요없다.

        reader = csv.reader(f)  # 불러온 파일을 csv.reader()로 reader 객체에 담아준다.

        # header = reader.next()  # Python 3부터는 csv.reader(파일).next()가 기본으로 탑재되어있다.

        data = [row for row in reader]

        '''

        'data = [row for row in reader]와 같은 의미'

        for row in reader:

            data.append(row)

        '''

except csv.Error as e:

    print('에러남')

for p in data:  # data에 줄로 저장된 원소들을 순서대로 불러온다.

    print(p)

'''

'수업시간에 한 프로그램'

import csv

filename = 'ch02-data.csv'

data = []

try:

    with open(filename, encoding="UTF-8-sig") as f:

        reader = csv.reader(f)

        c = 0

        for row in reader:

            if c == 0:

                data.append(row)

            else:

                data.append(row)

            c += 1

except csv.Error as e:

    print('출력 %s' %(reader.line_num))

for p in data:

    print(p)

'''






import xlrd.xldate


file = 'ch02-xlsxdata.xlsx'  # 불러올 파일 설정


wb = xlrd.open_workbook(filename=file)  # <xlrd.book.Book object at 0x00000087F7797A20> 전체를 불러온다.


ws = wb.sheet_by_name('Sheet1')  # <xlrd.sheet.Sheet object at 0x00000087F7AF2208> 내용 중 하나의 시트만 불러온다.

    # ws = wb.sheet_by_index(0)  # Sheet1 = index(0). 시트의 시작은 0부터 시작한다.


dataset = []  # 데이터를 담아줄 객체


for r in range(ws.nrows):  # Sheet1에 담겨진 데이터를 총 행의 갯수만큼 읽을 것이다. 9줄.

    col = []

    for c in range(ws.ncols):  # Sheet1에 담겨진 데이터를 총 열의 갯수만큼 읽을 것이다. 16줄.

        col.append(ws.cell(r, c).value)  # ws.cell(r, c) -> r행 c열의 cell 데이터를 선택하고

                                         # ws.cell(r, c).value -> 선택한 cell의 값을 불러온다.

    dataset.append(col)  # dataset에 저장되는 건 행별로 저장된다. 1행의 값을 ','로 연결해서 저장.


from pprint import pprint  # 예쁘게 출력하는 pretty print

pprint(dataset)

'''

'dataset의 구조'

2차원 구조의 리스트가 저장된다.

[

   [1행1열 데이터, 1행2열 데이터, 1행3열 데이터, ... , 1행17열 데이터],

   [2행1열 데이터, 2행2열 데이터, 2행3열 데이터, ... , 2행17열 데이터],

   ...

   [10행1열 데이터, 10행2열 데이터, 10행3열 데이터, ... , 10행17열 데이터]

]

'''






# 정확한 해석이 불가한 프로그램. try - except 부분이 이해가 안 된다.

import xlrd.xldate

from xlrd.xldate import XLDateAmbiguous


file = 'ch02-xlsxdata.xlsx'


wb = xlrd.open_workbook(filename = file, encoding_override='UTF-8', on_demand='True')

# on_demand='True'는 요구할 때만 객체를 생성한다는 뜻. 즉, 아래서 wb를 사용해야지만 객체가 생성된다.


ws = wb.sheet_by_name('Sheet1')


dataset = []


for r in range(ws.nrows):

    col = []

    for c in range(ws.ncols):

        col.append(ws.cell(r, c).value)

        if ws.cell_type(r, c) == xlrd.XL_CELL_DATE:  # 날짜 형식의 데이터가 존재하는지 확인.

            try:

                print(ws.cell_type(r, c))  # cell에 담겨있는 데이터의 형식 확인.

                from datetime import datetime

                # 데이터 형식이 date인 데이터를 튜플 객체로 만든다.

                date_value = xlrd.xldate_as_tuple(ws.cell(r, c).value, wb.datemode)  # "여기가 에러난다."

                                                                                    # wb.datemode 1을 넣으면 정상출력

                # date_value = xlrd.xldate_as_tuple(ws.cell(r, c).value, 1)

                print(datetime(*date_value))  # 제대로 저장되었는지 출력.

            except XLDateAmbiguous as e:

                print(e)  # 에러가 난 경우 값을 확인한다.

        dataset.append(col)

from pprint import pprint

pprint(col)





import struct  # 성능이 중요하거나 파싱할 파일이 크다면 사용하는 모듈

import string


datafile = 'test.data'



'''

'마스크란?'

어떤 문자 패턴의 몇 부분의 유지 또는 소거를 제어하기 위해서 사용되는 문자 패턴. 

어느 비트 패턴(bit pattern)의 특정 비트 위치의 정보를 변경하거나 삭제하기 위해서 사용되는 

문자 또는 「비트 패턴」으로, 원래의 의미는 「가면으로 가리다」에서 유래한다. 

마스크는 불 연산(boolean operation)의 오퍼랜드(operand)의 한 방법이고, 

마스크를 행하는 것을 마스킹(masking), 

마스크로서 사용되는 비트를 마스크 비트(mask bit) 

또한 마스킹에 사용되는 레지스터(register)를 마스크 레지스터(mask register)라고 한다.

[네이버 지식백과] 마스크 [mask] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)

'''

# 파일의 각 데이터 라인을 이해하는 방법 정의

mask = '9s14s5s'


with open(datafile, 'rb') as f:  # 바이너리 파일로 읽어야 한다.

    for line in f:

        fileds = struct.Struct(mask).unpack_from(line)

        print('fileds: ', [filed.strip() for filed in fileds])

        '''

        a = []

        for filed in fileds:

            a.append(filed.strip())

        print('fileds: ', a)

        '''





============================ Python ============================

+ Recent posts