2024.03.28. 파이썬 절망의시작

2024. 3. 28. 17:37· 공부 기록
목차
  1. 한 행씩 읽어 들이기
  2. CSV 파일 개념
  3. CSV 파일 처리
  4. CSV 라이브러리
  5. CSV 응용 프로그램
from tkinter import *  # tkinter 모듈로부터 모든 기능을 불러옴
from tkinter.simpledialog import *  # tkinter의 simpledialog 모듈로부터 모든 기능을 불러옴

## 함수 선언 부분 ##

window = Tk()  # Tk 클래스의 인스턴스 생성, 새 창 생성
window.geometry("400x100")  # 창 크기를 400x100 픽셀로 설정

label1 = Label(window, text="입력된 값")  # Label 클래스의 인스턴스 생성, 부모 윈도우는 window, 텍스트는 "입력된 값"
label1.pack()  # 라벨을 윈도우에 배치

# askinteger 함수를 사용하여 사용자로부터 정수 값을 입력 받음
# 첫 번째 매개변수는 대화 상자 제목, 두 번째 매개변수는 대화 상자 메시지
# minvalue와 maxvalue 매개변수를 사용하여 입력할 수 있는 값의 범위를 지정
value = askinteger("확대배수", "주사위 숫자(1~6)을 입력하세요", minvalue=1, maxvalue=6)

# 입력받은 값을 문자열로 변환하여 label1의 텍스트로 설정
label1.configure(text=str(value))

window.mainloop()  # GUI 이벤트 루프 시작, 윈도우를 띄우고 사용자 입력을 기다림

 

from tkinter import *  # tkinter 모듈로부터 모든 기능을 불러옴
from tkinter.filedialog import *  # tkinter의 filedialog 모듈로부터 모든 기능을 불러옴

## 함수 선언 부분 ##

window = Tk()  # Tk 클래스의 인스턴스 생성, 새 창 생성
window.geometry("400x100")  # 창 크기를 400x100 픽셀로 설정

label1 = Label(window, text="선택된 파일 이름")  # Label 클래스의 인스턴스 생성, 부모 윈도우는 window, 텍스트는 "선택된 파일 이름"
label1.pack()  # 라벨을 윈도우에 배치

# askopenfilename 함수를 사용하여 파일 선택 대화상자를 띄움
# parent 매개변수로는 대화상자의 부모 윈도우를 지정하고, filetypes 매개변수로 사용 가능한 파일 형식을 제한함
filename = askopenfilename(parent=window, filetypes=(("GIF 파일", "*.gif"), ("모든 파일", "*.*")))

# 선택된 파일 이름을 문자열로 변환하여 label1의 텍스트로 설정
label1.configure(text=str(filename))

window.mainloop()  # GUI 이벤트 루프 시작, 윈도우를 띄우고 사용자 입력을 기다림

 

 

한 행씩 읽어 들이기

inFp = None # 입력 파일
inStr = "" # 읽어 온 문자열

inFp = open("C:/Temp/happy.txt", "r", encoding="utf-8")

inStr = inFp.readline()
print(inStr, end = "")

inStr = inFp.readline()
print(inStr, end = "")

inStr = inFp.readline()
print(inStr, end = "")

inFp.close()

 

결과

숙제 : 혼자 공부하는 파이썬 3장, 4장 확인문제, 도전문제 다 풀기 

 

 

CSV 파일 개념

DB를 사용할 수 없을 때 사용해야 함.

데이터가 쉼표로 구분이 됨

 

CSV 파일 처리

 

def printList(pList):
    # 리스트의 각 요소를 반복하여 출력
    for data in pList:
        print(data, end='\t')  # 요소를 탭으로 구분하여 출력
    print()  # 줄 바꿈

with open("C:\\Users\\Public\\Documents\\pythontest\\code6\\new_singer1.csv", "r") as inFp:
    header = inFp.readline()  # 첫 번째 줄을 읽어 헤더로 사용
    header = header.strip()  # 문자열 양쪽의 공백 제거
    header_list = header.split(',')  # 쉼표로 구분하여 리스트로 변환
    printList(header_list)  # 헤더 리스트 출력
    for inStr in inFp:  # 파일에서 한 줄씩 읽기
        inStr = inStr.strip()  # 문자열 양쪽의 공백 제거
        row_list = inStr.split(',')  # 쉼표로 구분하여 리스트로 변환
        printList(row_list)  # 각 행 리스트 출력

 

이 코드는 CSV 파일을 읽고 각 행의 데이터를 출력하는 예제입니다. `printList` 함수는 주어진 리스트의 각 요소를 탭으로 구분하여 출력합니다. CSV 파일을 열고 첫 번째 줄을 헤더로 읽어 헤더 리스트를 만든 후 출력합니다. 그런 다음 파일에서 각 행을 읽어와 각 행의 데이터를 리스트로 만들고 출력합니다.

 

결과값

 

 

챗지피티짱

너없었으면 공부 어떻게 했겠니..

 

csv 너무 어렵다..

역시 응용수학을 못하던 나..

난 사실 FM이 좋은걸지도모르겠음

 

 

CSV 라이브러리

 

import csv  # csv 모듈을 임포트합니다.

# CSV 파일을 읽어오기 위해 'with' 문을 사용하여 파일을 엽니다.
with open("C:\\Users\\Public\\Documents\\pythontest\\code6\\singer2.csv", "r") as inFp:
    csvReader = csv.reader(inFp)  # CSV 파일을 읽는 리더 객체를 생성합니다.
    header_list = next(csvReader)  # 첫 번째 행을 읽고 헤더 리스트에 할당합니다.
    print(header_list[1], header_list[6])  # 헤더 리스트의 두 번째와 일곱 번째 열의 값을 출력합니다.

    # 파일의 나머지 행을 반복하며 처리합니다.
    for row_list in csvReader:
        youtube = int(row_list[6].replace(',', ''))  # 일곱 번째 열의 값을 쉼표를 제거하고 정수로 변환합니다.
        youtube = int(youtube / 10000)  # 값을 만 단위로 나누어 변환합니다.
        print(row_list[1], str(youtube) + "만")  # 두 번째 열의 값과 변환된 값을 출력합니다.

 

  1. csv 모듈을 임포트합니다.
  2. with 문을 사용하여 CSV 파일을 엽니다. 파일 객체를 inFp에 할당합니다.
  3. csv.reader() 함수를 사용하여 CSV 파일을 읽는 리더 객체인 csvReader를 생성합니다.
  4. next(csvReader)를 호출하여 첫 번째 행을 읽고, 헤더 리스트를 header_list에 할당합니다.
  5. 헤더 리스트에서 두 번째와 일곱 번째 열의 값을 출력합니다.
  6. for 루프를 사용하여 파일의 나머지 행을 반복하며 처리합니다.
  7. 각 행의 일곱 번째 열의 값을 쉼표(,)를 제거하고 정수로 변환한 후, 만 단위로 나누어 줄여서 출력합니다.

CSV 응용 프로그램

from tkinter import *
import csv

## 함수 선언 부분 ##
def makeEmptySheet(window, r, w):
    """
    빈 시트를 생성하는 함수입니다.
    
    Parameters:
        window (Tk): 윈도우 객체입니다.
        r (int): 행 수입니다.
        w (int): 열 수입니다.
    
    Returns:
        list: 빈 시트를 나타내는 2차원 리스트입니다.
    """
    retList = []
    for i in range(0, r):
        tmpList = []
        for k in range(0, w):
            ent = Entry(window, text='', width=10)  # 텍스트 입력 위젯을 생성합니다.
            ent.grid(row=i, column=k)  # 위젯을 그리드에 배치합니다.
            tmpList.append(ent)
        retList.append(tmpList)
    return retList

## 전역 변수 부분 ##
window = Tk()  # Tkinter 윈도우 객체를 생성합니다.
csvList = []  # CSV 파일의 데이터를 저장할 리스트입니다.

# CSV 파일을 읽어와서 csvList에 저장합니다.
with open("C:\\Users\\Public\\Documents\\pythontest\\code6\\singer1.csv", "r") as inFp:
    csvReader = csv.reader(inFp)
    header_list = next(csvReader)
    csvList.append(header_list)  # 헤더를 csvList에 추가합니다.
    for row in csvReader:
        csvList.append(row)  # 나머지 행을 csvList에 추가합니다.

rowNum = len(csvList)  # CSV 파일의 행 수를 가져옵니다.
colNum = len(csvList[0])  # CSV 파일의 열 수를 가져옵니다.

# 빈 시트를 생성합니다.
workSheet = makeEmptySheet(window, rowNum, colNum)

idx = 6
# csvList의 각 요소를 순회하며 시트에 데이터를 채웁니다.
for i in range(0, rowNum):
    for k in range(0, colNum):
        if csvList[i][idx].isnumeric():
            if int(csvList[i][idx]) >= 167:
                ent = workSheet[i][k]
                ent.configure(bg='yellow')  # 배경색을 노란색으로 변경합니다.
        workSheet[i][k].insert(0, csvList[i][k])  # 시트에 데이터를 삽입합니다.

window.mainloop()  # GUI 루프를 시작합니다.

 

 

CSV + 저장하기까지 추가

from tkinter import *
import csv

## 함수 선언 부분 ##
def makeEmptySheet(window, r, w):
    """
    빈 시트를 생성하는 함수입니다.
    
    Parameters:
        window (Tk): 윈도우 객체입니다.
        r (int): 행 수입니다.
        w (int): 열 수입니다.
    
    Returns:
        list: 빈 시트를 나타내는 2차원 리스트입니다.
    """
    retList = []
    for i in range(0, r):
        tmpList = []
        for k in range(0, w):
            ent = Entry(window, text='', width=10)  # 텍스트 입력 위젯을 생성합니다.
            ent.grid(row=i, column=k)  # 위젯을 그리드에 배치합니다.
            tmpList.append(ent)
        retList.append(tmpList)
    return retList

def saveCSV():
    """
    CSV 파일에 데이터를 저장하는 함수입니다.
    """
    with open("C:\\Users\\Public\\Documents\\pythontest\\code6\\saved_data.csv", "w", newline='') as outFp:
        writer = csv.writer(outFp)
        for row in workSheet:
            writer.writerow([ent.get() for ent in row])

## 전역 변수 부분 ##
window = Tk()  # Tkinter 윈도우 객체를 생성합니다.
csvList = []  # CSV 파일의 데이터를 저장할 리스트입니다.

# CSV 파일을 읽어와서 csvList에 저장합니다.
with open("C:\\Users\\Public\\Documents\\pythontest\\code6\\singer1.csv", "r") as inFp:
    csvReader = csv.reader(inFp)
    header_list = next(csvReader)
    csvList.append(header_list)  # 헤더를 csvList에 추가합니다.
    for row in csvReader:
        csvList.append(row)  # 나머지 행을 csvList에 추가합니다.

rowNum = len(csvList)  # CSV 파일의 행 수를 가져옵니다.
colNum = len(csvList[0])  # CSV 파일의 열 수를 가져옵니다.

# 빈 시트를 생성합니다.
workSheet = makeEmptySheet(window, rowNum, colNum)

idx = 6
# csvList의 각 요소를 순회하며 시트에 데이터를 채웁니다.
for i in range(0, rowNum):
    for k in range(0, colNum):
        if csvList[i][idx].isnumeric():
            if int(csvList[i][idx]) >= 167:
                ent = workSheet[i][k]
                ent.configure(bg='yellow')  # 배경색을 노란색으로 변경합니다.
        ent = workSheet[i][k]
        ent.insert(0, csvList[i][k])  # 시트에 데이터를 삽입합니다.

# "Save" 버튼을 생성하고, 버튼이 클릭되었을 때 saveCSV 함수를 실행합니다.
save_button = Button(window, text="Save", command=saveCSV)
save_button.grid(row=rowNum+1, column=0, columnspan=colNum, pady=10)

window.mainloop()  # GUI 루프를 시작합니다.

 

버튼 누르면 저장됨 ㄷㄷ

엑셀 파일 처리

import xlrd

# Excel 파일 열기
workbook = xlrd.open_workbook('C:\\Users\\Public\\Documents\\pythontest\\source\\Excel\\singer.xls')

# 시트 개수 가져오기
sheetCount = workbook.nsheets

# 전체 가수 그룹 인원 합계 및 행, 열, 셀 인덱스 초기화
personNum = 0
personIdx = 2
rowCount = 0

# 각 시트에 대해 처리
wsheetList = workbook.sheets()
for wsheet in wsheetList:
    rowCount += worksheet.nrows - 1  # 행 수 합산 (첫 행은 헤더이므로 제외)
    for row in range(1, worksheet.nrows):  # 첫 행은 헤더이므로 건너뜀
        personNum += int(worksheet.cell_value(row, personIdx))  # 가수 그룹의 인원 수 합산

# 결과 출력
print("전체 가수 그룹 인원 합계 : ", personNum)
print("가수그룹 인원 평균 : ", personNum / rowCount)

'공부 기록' 카테고리의 다른 글

2024.04.11. 알고리즘  (0) 2024.04.11
2024.04.08. ITQ  (0) 2024.04.09
2024.04.02. ITQ  (0) 2024.04.02
2024.03.26. (파이썬)  (1) 2024.03.26
2024.03.18 C언어  (0) 2024.03.18
  1. 한 행씩 읽어 들이기
  2. CSV 파일 개념
  3. CSV 파일 처리
  4. CSV 라이브러리
  5. CSV 응용 프로그램
'공부 기록' 카테고리의 다른 글
  • 2024.04.08. ITQ
  • 2024.04.02. ITQ
  • 2024.03.26. (파이썬)
  • 2024.03.18 C언어
bumm
bumm
개발자 꿈나무 / 철학과(졸업) 및 건축학과(찍먹) 출신의 IT 데뷔 스타일기
bumm
개발자가 되고 싶어? 그런데 왜 니 블로그는 그렇게 깨끗하고 예뻐?
bumm
전체
오늘
어제
  • 분류 전체보기 (54)
    • 공부 기록 (27)
      • 파이썬 (7)
      • C (9)
      • 알고리즘 (1)
      • JAVA (3)
    • 프로젝트 (12)
      • ICT 프로젝트 (5)
      • 노벨매지션 (0)
      • AI수화 (1)
      • 미니 프로젝트 (6)
    • 정보처리기사 (12)
      • 필기 (12)
    • 일기 (3)
      • ICT 멘토링 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

hELLO · Designed By 정상우.v4.2.2
bumm
2024.03.28. 파이썬 절망의시작
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.