FUNDAMENTAL | 05-2. 텍스트 데이터 (파일)

yeonk·2021년 9월 13일
0

aiffel-ai-bootcamp

목록 보기
11/38
post-thumbnail

20210913



1. 파일 & 디렉토리

  • 변수에 저장되는 데이터는 컴퓨터 메모리에 저장
    • 메모리에 저장되는 데이터는 빠르다는 장점
    • 일정 전원이 공급되어야지만 데이터가 보존
  • 파일(file): ROM(Read Only Memory)이라는 보조기억장치에 데이터를 저장






파일 관련 메소드

f.read(): 파일 읽기

f.readline(): 파일을 한 줄씩 읽기

f.readlines(): 파일 안의 모든 줄을 읽어 그 값을 리스트로 반환

f.write(str): 파일에 씀. 문자열 타입을 인자로 받음.

f.writelines(str): 파일에 인자를 한 줄씩 쓰기.

f.close(): 파일 닫기

f.seek(offset): 새 파일의 위치를 찾기






디렉토리

파일이 어느 폴더(디렉토리)에 저장되어 있는가가 매우 중요

  • 루트 디렉토리(root directory): 경로의 최상위 폴더

Window 운영 체제 : C:\
Linux 계열 운영 체제 : /

Linux 파일 시스템

Linux 기본 명령어/자주 쓰는 명령어






모듈과 패키지

  • 파이썬에서는 지원하는 디렉토리 관련 표준 라이브러리:
    • sys
    • os
    • glob
#- 현재 실행되고 있는 파이썬 실행 파일의 디렉토리를 반환
import sys
sys.executable

#- 임포트할 때 불러 오는 모듈들이 위치한 경로.
sys.path






모듈(module) : 파이썬으로 만든 코드가 들어간 파일 .py

패키지(package) : init.py가 포함된 폴더로 흔히 라이브러리라고 칭함

PIP(Package Installer for Python) : 패키지 관리자로 파이썬을 설치하면 기본으로 설치됨

PyPA(Python Packaging Authority) : 파이선 패키지를 관리하고 유지하는 그룹

PyPI(The Python Package Index) : 파이썬 패키지들의 저장소






함수

sys.path: 현재 폴더와 파이썬 모듈들이 저장되어 있는 위치를 리스트 형태로 반환

sys.path.append(): 자신이 만든 모듈의 경로를 append 함수를 이용해서 추가함으로써 추가한 디렉토리에 있는 파이썬 모듈을 불러와 사용할 수 있다.

os.chdir(): 디렉토리 위치 변경

os.getcwd(): 현재 자신의 디렉터리 위치를 반환

os.mkdir(): 디렉토리 생성

os.rmdir(): 디렉토리 삭제
(단, 디렉토리가 비어 있을 경우)

glob.glob(): 해당 경로 안의 디렉토리나 파일들을 리스트 형태로 반환

os.path.join(): 경로(path)를 병합하여 새 경로 생성

os.listdir(): 디렉토리 안의 파일 및 서브 디렉토리 리스트

os.path.exists(): 파일 혹은 디렉토리의 경로 존재 여부 확인

os.path.isfile(): 파일 경로의 존재 여부 확인

os.path.isdir(): 디렉토리 경로의 존재 여부 확인

os.path.getsize(): 파일의 크기 확인






2. 다양한 파일 포맷

CSV(Comma Seperated Value)

쉼표로 구분된 파일.
칼럼(column)을 쉼표(,)로 구분






CSV & Pandas

판다스(pandas)의 DataFrame은 to_csv 메소드를 지원

출처: AIFFEL FUNDAMENTAL_ 5. 텍스트 데이터



  • 해당 메소드를 이용하면 csv 파일로 쉽게 저장

  • csv 파일을 DataFrame으로 변환시키면 데이터 분석 등 사용자가 편집하기에 용이






billboardchart = {
  		 1 : ["Tho Box","Roddy Ricch","2019-12-19"],
                 2 : ["Don't Start Now", "Dua Lipa", "2019-11-01"],
                 3 : ["Life Is Good", "Future Featuring Drake", "2020-02-10"],
                 4 : ["Blinding", "The Weeknd", "2019-11-29"],
                 5 : ["Circles", "Post Malone","2019-08-30"]}

with open("billboardchart.csv","w") as f:
    for i in billboardchart.values():
        data = ",".join(i)
        f.write(data+"\n")



#- 1. 데이터를 준비합니다.
fields = ["title", "singer", "released date"]

rows = [ ["Tho Box","Roddy Ricch","2019-12-19"],
         ["Don't Start Now", "Dua Lipa", "2019-11-01"],
         ["Life Is Good", "Future Featuring Drake", "2020-02-10"],
         ["Blinding", "The Weeknd", "2019-11-29"],
         ["Circles", "Post Malone","2019-08-30"]]        



#- 2. 판다스를 이용해 데이터를 csv 파일로 저장합니다.
import pandas as pd

df=pd.DataFrame(rows, columns=fields)
df.to_csv('pandas.csv',index=False)




#- 3. 동일한 내용을 csv.writer를 이용해 수행해 봅니다.
import csv 

filename = "test.csv"
with open(filename, 'w+', newline='\n') as csv_file: 
    csv_writer = csv.writer(csv_file) 
    csv_writer.writerow(fields) 
    csv_writer.writerows(rows)



# csv 파일을 DataFrame으로 변환

df = pd.read_csv('pandas.csv')
df.head()






XML(Extensible Markup Language)

다목적 마크업 언어.
인터넷 웹상에서 문서 즉, 내용을 교환할 때 이러한 마크업 언어를 이용.

  • 마크업 언어: 태그(tag)로 이루어진 언어.
    상위(부모)태그 - 하위(자식)태그의 계층적 구조를 가짐

  • XML은 요소(element)들로 이루어짐

  • 요소: <태그> 내용 </태그> 형태로 구성.
    성(attribute)값을 가질 수도 있음.






ElementTree

파이썬 표준 라이브러리

Element(): 태그 생성

SubElement(): 자식 태그 생성

tag: 태그 이름

text: 텍스트 내용 생성

attrib: 속성 생성






dump()

생성된 XML 요소 구조를 시스템(sys.stdout)에 사용

  • write(): XML 파일로 저장

  • 리스트(list)와 유사한 메소드를 제공

    • append, insert, remove, pop






# XML 파일 생성하기

import xml.etree.ElementTree as ET

person = ET.Element("Person")
name = ET.Element("name")
name.text = "이펠"
person.append(name)

age = ET.Element("age")
age.text = "28"
person.append(age)

ET.SubElement(person, 'place').text = '강남'

ET.dump(person)


# 속성값, 태그명 변경(attrib, tag 메소드 활용) 

person.attrib["id"] = "0x0001"
name.tag = "firstname"
ET.dump(person)


# 태그 삽입 (insert 활용)

lastname = ET.Element('lastname', date='2020-03-20')
lastname.text = '아'
person.insert(1,lastname)
ET.dump(person)


# 태그 삭제 (remove, pop 활용)

person.remove(age)


# XML 파일 저장하기
ET.ElementTree(person).write('person.xml')






JSON(JavaScript Object Notation)

웹 언어인 JavaScript의 데이터 객체 표현 방식.
다른 애플리케이션 사이에서 HTTP 요청으로 데이터를 보낼 때 널리 사용하는 표준 파일 포맷중 하나.

  • 파이썬의 dictionary 타입과 유사한 구조

  • CSV 파일에 비해 좀 더 유연하게 데이터를 표현할 수 있고 XML 파일보다 파일을 쉽게 읽고 쓸 수 있음






# json 파일 저장하기

import json

person = {
      "first name" : "Yuna",
      "last name" : "Jung",
      "age" : 33,
      "nationality" : "South Korea",
      "education" : [{"degree":"B.S degree", "university":"Daehan university", "major": "mechanical engineering", "graduated year":2010}]
       } 

with open("person.json", "w") as f:
    json.dump(person , f)
    
    
# json 파일 읽기

import json

with open("person.json", "r", encoding="utf-8") as f:
    contents = json.load(f)
    print(contents["first name"])
    print(contents["education"])
    

0개의 댓글