'2024/08'에 해당되는 글 2건

  1. 2024.08.10 :: [Python] replace 와 overlay 차이
  2. 2024.08.01 :: [Python] 변수 초기화: 타입 힌팅(Type Hinting)
카테고리 없음 2024. 8. 10. 13:48
반응형

협업을 하다 보면, 엉뚱한(?) 문제로 고생을 하는 경우가 있습니다.

이번에 생각지도 못한 부분에 오류(?)가 있어 정리를 합니다.(아래에 제가 사용하는 코드 일부를 발취하였습니다.)

def F_Base_MakeFile(file_path, dataDf, sheetName=Get_strDay()[2:]):

    # 파일이 존재하지 않으면 파일 생성
    if not os.path.exists(file_path):
        dataDf.to_excel(file_path, index=False, sheet_name=sheetName)
        print(f"[F_Base_MakeFile]{file_path} 파일 생성: 시트이름: {sheetName}")

    else:
        # 파일이 존재하면, 엑셀 파일을 불러옴
        book = load_workbook(file_path)

        if sheetName in book.sheetnames:
            # 시트가 존재하면 기존 데이터를 불러옴
            existing_df = pd.read_excel(file_path, sheet_name=sheetName)

            # 컬럼이 일치하는지 확인
            if list(existing_df.columns) == list(dataDf.columns):
                # 컬럼이 일치하면 데이터를 추가
                with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
                    dataDf.to_excel(writer, index=False, header=False, startrow=len(existing_df) + 1,sheet_name=sheetName)
                print(f"[F_Base_MakeFile]{file_path}파일 시트{sheetName}에 데이터 추가완료.")
            else:
                raise ValueError(f"[F_Base_MakeFile]Error: 시트{sheetName}컬럼과 입력 DF 컬럼 불일치")
        else:
            # 시트가 존재하지 않으면 새로운 시트를 생성
            with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
                dataDf.to_excel(writer, index=False, sheet_name=sheetName)
            print(f"[F_Base_MakeFile]{file_path} 파일에 새로운 시트{sheetName}생성")

 

위에 보면 아래와 엑셀 파일 생성하는 부분에 'overlay'부분이 보입니다.

1.'overlay'는 기존 시트를 유지하면서, 새 데이터를 덮어씁니다.
새 데이터프레임의 내용이 기존 시트의 해당 위치에 쓰여지며, 기존 데이터와 겹치는 부분만 업데이트되게 됩니다. 또한 기존 시트의 내용 중에서 새로 작성한 데이터프레임과 겹치지 않는 부분은 그대로 유지됩니다. 예를 들어, 새 데이터프레임에 포함되지 않은 열이나 행은 기존 시트에 그대로 남아있습니다.

 

2. ' replace'는 기존 시트를 완전히 대체합니다.

지정된 시트 이름이 이미 존재할 경우, 해당 시트의 모든 데이터를 삭제하고 새로운 데이터로 완전히 덮어쓰게 됩니다.
기존 시트의 구조(예: 셀의 서식, 데이터)가 사라지고, 새로 작성한 데이터프레임만 시트에 남게 됩니다.

 

 

 

 

반응형
posted by choiwonwoo
:
MINERVA/Python 2024. 8. 1. 09:58
반응형

파이썬은 data type assgnment 언어입니다. 그런데, 코드를 보다 보면 C/C++과 유사하게 변수를 초기화할때 데이타 타입을 명시해주는 경우가 있습니다. 이렇게 코딩을 하는 것을  타입 힌팅(Type Hinting)라고 하는데, 프로그램 성능에는 영향이 없으나, IDE의 코드 분석 기능에 도움을 주게 됩니다.

 

아래에 간단하게, 파이썬에서 변수를 초기화하는 2가지 방법의 차이점을 을 정리합니다.

 

1. max_value: int = 100

  • 타입 힌팅(Type Hinting): 여기서 : int는max_value변수가 정수형(int)임을 명시하는 타입 힌트(type hint)입니다.
  • 주로 사용 목적: 이는 변수의 타입을 명시적으로 표시하여 코드의 가독성을 높이고, 정적 타입 검사 도구(static type checker)나 IDE의 코드 분석 기능을 돕기 위해 사용됩니다.
  • 실행 시간 영향: 타입 힌팅은 실행 시간에는 아무런 영향을 미치지 않으며, 이는 런타임에 무시됩니다. 이는 오직 개발 도구가 이를 사용하여 타입을 추론하고 경고를 발생시키기 위한 것입니다.

2. max_value = 100

  • 기본적인 변수 초기화: 이는 기본적인 변수 초기화 방법입니다. 변수가 정수형인지 명시적으로 표시하지 않습니다.
  • 주로 사용 목적: 일반적인 변수 초기화 방식이며, 타입을 명시적으로 표시하지 않아도 될 때 사용합니다.
  • 실행 시간 영향: 타입 힌팅이 없는 것과 마찬가지로, 이는 런타임에 실행되어 변수max_value에 값을 할당합니다.

요약

  • 타입 힌팅(: int): 코드를 더 명확하고 가독성 높게 만들며, 정적 분석 도구의 도움을 받을 수 있습니다.
  • 변수 초기화(= 100): 기본적인 변수 초기화 방식이며, 타입 힌트 없이 변수를 초기화합니다.

예를 들어, 아래와 같이 타입 힌팅을 사용하면 IDE에서 자동 완성 기능을 제공하거나 타입 오류를 사전에 검출할 수 있습니다:

 

반응형
posted by choiwonwoo
: